我正在阅读一个包含数千列的文件,我只对前10列感兴趣。 如何告诉fread读取前10列,然后将所有这些列连接到一列。 我假设这会显着加快文件的读取速度。
答案 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
所以你从内存中删除大数据框。 阅读大文件经验丰富的人可以提出自己的意见或建议。