只是一个简单的问题。是否有一种方法可以使用read.csv从大文件中导入每一行:
例如,一个5-6千万行文件,您只需要从第2行开始每4行。
我考虑过可能合并“seq”函数,但我不确定这是否可能。
有什么建议吗?
发布于 2014-02-19 21:18:25
对于大型数据文件,最好的选择是在将不必要的行导入到R中之前过滤掉它们,最简单的方法是使用OS命令,如sed、awk、grep等。下面的代码每4行从文件中读取一次:例如:
write.csv(1:1000, file='test.csv')
file.pipe <- pipe("awk 'BEGIN{i=0}{i++;if (i%4==0) print $1}' < test.csv ")
res <- read.csv(file.pipe)
res
> res
X3 X3.1
1 7 7
2 11 11
3 15 15
4 19 19
5 23 23
6 27 27
7 31 31
8 35 35发布于 2014-02-19 20:40:29
read.csv("filename.csv")[c(FALSE, TRUE, FALSE, FALSE), ]会成功的。
这是因为逻辑向量被回收,直到它匹配read.csv返回的数据帧的行数。
发布于 2014-02-19 21:21:26
正如@ As 239所建议的,使用命令行工具预先过滤行要好得多。
下面是一个使用sed的简单版本
df <- read.csv(pipe("sed -n '2~4p' test.csv")) 2~4p告诉sed每4行得到一次,从第2行开始。
https://stackoverflow.com/questions/21891841
复制相似问题