我有一个表(具有100万以上的行),用'||'分隔在其中一列中使用该符号('|')。我无法用data.table的fread读取它,因为它只允许输入1个字符的长度,而read.table都不允许。 这些行的示例为:
1-Xxxxx||5804||CONTROL REMOTO 5804/5834 - xxxx||31/5/2018 03:00:00||CALLE EL QUIYA CASA 99, MANZANA 99, - SECCION 8, CIRCUNSCRIPCION 4°|? -(xxxx) (CIUDAD)||2
以下内容仅在一个字段中,但符号为“ |”:
CALLE EL QUIYA CASA 99, MANZANA 99, - SECCION 8, CIRCUNSCRIPCION 4°|? - (xxxx) (CIUDAD)
所需的拆分为:
field1= 1-Xxxxx
field2= 5804
field3= CONTROL REMOTO 5804/5834 - HONEYWELL
field4=31/5/2018 03:00:00
field5=CALLE EL QUIYA CASA 99, MANZANA 99, - SECCION 8, CIRCUNSCRIPCION 4°|? - () (CIUDAD EVITA )
field6= 2
谢谢!
答案 0 :(得分:2)
您可以阅读整行,然后使用正则表达式来拆分行。您必须添加一些列名称才能将其添加到数据框中,因此我只使用了a-f
,但用您自己的列名进行了替换。您还应该能够将lines
替换为文本文件的路径,这里我仅以文字数据为例。
library(tidyverse)
line <- " 1-Xxxxx||5804||CONTROL REMOTO 5804/5834 - xxxx||31/5/2018 03:00:00||CALLE EL QUIYA CASA 99, MANZANA 99, - SECCION 8, CIRCUNSCRIPCION 4°|? -(xxxx) (CIUDAD)||2"
lines <- c(line, line)
line_list <- read_lines(lines) %>%
str_split("\\|\\|") %>%
map(~set_names(., letters[1:6]))
bind_rows(!!!line_list)
#> # A tibble: 2 x 6
#> a b c d e f
#> <chr> <chr> <chr> <chr> <chr> <chr>
#> 1 " 1-Xx… 5804 CONTROL REMOT… 31/5/201… CALLE EL QUIYA CASA 99,… 2
#> 2 " 1-Xx… 5804 CONTROL REMOT… 31/5/201… CALLE EL QUIYA CASA 99,… 2
由reprex package(v0.2.1)于2019-03-19创建
答案 1 :(得分:0)
将数据读入一列:
d <- data.table::fread(text =
'1-Xxxxx||5804||CONTROL REMOTO 5804/5834 - xxxx||31/5/2018 03:00:00||CALLE EL QUIYA CASA 99, MANZANA 99, - SECCION 8, CIRCUNSCRIPCION 4°|? -(xxxx) (CIUDAD)||2
1-Xxxxx||5804||CONTROL REMOTO 5804/5834 - xxxx||31/5/2018 03:00:00||CALLE EL QUIYA CASA 99, MANZANA 99, - SECCION 8, CIRCUNSCRIPCION 4°|? -(xxxx) (CIUDAD)||2',
sep = '', data.table = FALSE, header = FALSE)
分隔列:
tidyr::separate(d, V1, into = paste('V', 1:6), sep = '\\|\\|', covert = TRUE)
V 1 V 2 V 3 V 4 1 1-Xxxxx 5804 CONTROL REMOTO 5804/5834 - xxxx 31/5/2018 03:00:00 2 1-Xxxxx 5804 CONTROL REMOTO 5804/5834 - xxxx 31/5/2018 03:00:00 V 5 V 6 1 CALLE EL QUIYA CASA 99, MANZANA 99, - SECCION 8, CIRCUNSCRIPCION 4°|? -(xxxx) (CIUDAD) 2 2 CALLE EL QUIYA CASA 99, MANZANA 99, - SECCION 8, CIRCUNSCRIPCION 4°|? -(xxxx) (CIUDAD) 2
将paste('V', 1:6)
更改为您的实际列名。
(这种方法与@CalumYou的方法非常相似)