数据表中的r-fread,但列太多



我最近更新了data.table包,我正在为fread()函数而苦恼。以前,(版本1.10.4-3(如果我使用fread(),它可以将我正在读取的数据分隔成列。新版本不能做到这一点,若我使用fill = TRUE标记,它会把所有内容都放到列中。

问题是它检测到有13个列名,但新版data.table试图填充其他列。还有办法做到这一点吗?

这是我的输入,但新的data.table无法再正确地分隔列。

我知道可能还有其他包可以做到这一点,但如果可能的话,我更喜欢使用data.table。

id, value, other
1, "("a"="b", "b"="c", "c"="d")", 2
2, "("a"="b", "b"="c", "c"="d")", 3

Vroom在不添加额外列的情况下处理测试用例,例如

library(vroom)
test <- vroom(file = "test.txt")
test
# A tibble: 2 x 3
id value           other
<dbl> <chr>           <dbl>
1     1 (a=b, b=c, c=d)     2
2     2 (a=b, b=c, c=d)     3

编辑

保留引号:

library(vroom)
test <- vroom(file = "test.txt", escape_double = FALSE)
test
# A tibble: 2 x 3
id value                                     other
<dbl> <chr>                                     <dbl>
1     1 ("a"="b", "b"="c", "c"="d")     2
2     2 ("a"="b", "b"="c", "c"="d")     3

1.10.6版本中的报价规则发生了更改。它们现在更健壮,性能更好,但不会处理不平衡报价和其他情况。查看fread当前文档中的报价详细信息。

作为替代方案,您可以使用使用scan处理引号内引号的函数,如read.table:

read.table("example.txt", sep = ",", header = TRUE)

或者,正如@jared mamrot所回答的,使用vroom以获得更好的性能,稍后使用setDT转换为data.table

最新更新