Мы могли бы прочитать это с помощью readLines
, а затем создать два столбца data.frame
с помощью sub
#read the lines with readLines
lines <- readLines('pavel.txt')
#match one or more spaces followed by one or more characters
#replace with `''` to extract the non-space characters at the beginning.
str1 <- sub('\\s+.*', '', lines)
#match non space characters from the beginning (`^[^ ]+`) followed by space
#replace with `''` to extract the characters that follow after the space.
str2 <- sub('^[^ ]+\\s+', '', lines)
out <- data.frame(v1= str1, v2=str2, stringsAsFactors=FALSE)
head(out,3)
# v1 v2
#1 LIISS License Issued
#2 LIMOD License Modified
#3 LIPASS License Assigned (Partial Assignment)
Или другой вариант extract
из library(tidyr)
после прочтения набора данных в одном столбце. Мы используем группы захвата для извлечения символов, которые нам нужны в каждом столбце. Здесь ([^ ]+)
соответствует одному или нескольким не-пробелам и фиксируется круглыми скобками, за которым следует одно или несколько пробелов (которые мы удаляем), а затем используйте вторую группу захвата для извлечения остальных символов.
library(tidyr)
extract(read.table('pavel.txt', sep=','), V1,
into= c('V1', 'V2'), '([^ ]+)\\s+(.*)')
# V1 V2
#1 LIISS License Issued
#2 LIMOD License Modified
#3 LIPASS License Assigned (Partial Assignment)
#4 LIPND License Assigned (Partition/Disaggregation)
#5 LIPPND License Issued from a Partial/P&D Assignment
#6 LIPUR License Purged
#7 LIREIN License Reinstated
#8 LIREN License Renewed
Или мы могли бы заменить первое пространство с ,
затем использовать read.csv
с sep=','
.
read.table(text=sub(' ', ',', readLines('pavel.txt')), sep=',')
# V1 V2
#1 LIISS License Issued
#2 LIMOD License Modified
#3 LIPASS License Assigned (Partial Assignment)
#4 LIPND License Assigned (Partition/Disaggregation)
#5 LIPPND License Issued from a Partial/P&D Assignment
#6 LIPUR License Purged
#7 LIREIN License Reinstated
#8 LIREN License Renewed
Если мы используем Linux, то awk
может быть передан с fread
из data.table
или read.csv/read.table
.
library(data.table)
fread("awk '{sub(\" \", \",\", $0)}1' pavel.txt", header=FALSE)
# V1 V2
#1: LIISS License Issued
#2: LIMOD License Modified
#3: LIPASS License Assigned (Partial Assignment)
#4: LIPND License Assigned (Partition/Disaggregation)
#5: LIPPND License Issued from a Partial/P&D Assignment
#6: LIPUR License Purged
#7: LIREIN License Reinstated
#8: LIREN License Renewed
сообщение воспроизводимый пример. –