R fread文件有数千列,在前10后连续

时间:2017-04-28 20:20:01

标签: r data.table fread

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

2 个答案:

答案 0 :(得分:2)

你可以用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
> 

但是如果根据您正在使用的数据,这不能直接解析,我可能会采用这种方法。另一种方法是在读入文件后在帖子中进行连接。我也怀疑这会加速fread操作。

答案 1 :(得分:0)

我可能会弄错,但我不认为在导入数据时可以直接使用。但阅读后,您只能获得新数据框中的第一个并删除旧数据框。如果您在df中读取数据,则可以执行此操作(NB代码未经过测试)

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

所以你从内存中删除大数据框。 阅读大文件经验丰富的人可以提出自己的意见或建议。