具有数千列的 R fread 文件,在前 10 列之后连接

R fread file with thousands of columns, concat after first 10

我正在读取一个包含几千列的文件,我只对前 10 列感兴趣。 我怎样才能告诉 fread 阅读前 10 列,然后将所有这些内容连接到一列中。 我假设这会显着加快文件的读取速度。

我可能弄错了,但我认为在导入数据时不可能直接这样做。但是在阅读之后你只能得到新数据框中的第一个并删除旧的。如果您在 df 中读取数据,您可以简单地执行(NB 代码未测试)

 df10 <- df[,1:10]
 df <- NULL

所以你从内存中删除了大数据框。 有阅读大文件经验的人可以给his/her意见或建议

你可以用 awk 做到这一点:

> fread("../foo.csv")
       a     b     c     d     e     f     g     h     i
   <int> <int> <int> <int> <int> <int> <int> <int> <int>
1:     1     2     3     4     5     6     7     8     9
2:     2     3     4     5     6     7     8     9    10
> fread("cat ../foo.csv | awk -F ',' 'BEGIN { s = 5 } { for (i=1; i<=NF; i++) printf(\"%s%s\", $(i), i<s ? OFS : i<NF ? \"\" : ORS) }'")
       a     b     c     d  efghi
   <int> <int> <int> <int>  <int>
1:     1     2     3     4  56789
2:     2     3     4     5 678910
> 

但是,如果根据您正在处理的数据,这不能立即解析,我可能会放弃这种方法。另一种方法是在读入文件后在 post 中执行连接。我也怀疑这会大大加快 fread 操作的速度。