我有一个表(超过100万行),由'||'分隔在其中一列中使用该符号('|')。我无法通过data.table中的fread读取它,因为它只允许1个char的长度,而不是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
谢谢!
您可以读取整行,然后使用正则表达式来分割线条。你必须添加一些列名称才能使它成为一个数据帧,所以我只使用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创建于2019-03-19(v0.2.1)
在一列中读入您的数据:
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非常相似)