首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >仅从R中的.csv文件中导入每一行

仅从R中的.csv文件中导入每一行
EN

Stack Overflow用户
提问于 2014-02-19 20:35:46
回答 5查看 7.1K关注 0票数 9

只是一个简单的问题。是否有一种方法可以使用read.csv从大文件中导入每一行:

例如,一个5-6千万行文件,您只需要从第2行开始每4行。

我考虑过可能合并“seq”函数,但我不确定这是否可能。

有什么建议吗?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2014-02-19 21:18:25

对于大型数据文件,最好的选择是在将不必要的行导入到R中之前过滤掉它们,最简单的方法是使用OS命令,如sed、awk、grep等。下面的代码每4行从文件中读取一次:例如:

代码语言:javascript
复制
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
票数 16
EN

Stack Overflow用户

发布于 2014-02-19 20:40:29

代码语言:javascript
复制
read.csv("filename.csv")[c(FALSE, TRUE, FALSE, FALSE), ]

会成功的。

这是因为逻辑向量被回收,直到它匹配read.csv返回的数据帧的行数。

票数 5
EN

Stack Overflow用户

发布于 2014-02-19 21:21:26

正如@ As 239所建议的,使用命令行工具预先过滤行要好得多。

下面是一个使用sed的简单版本

代码语言:javascript
复制
df <- read.csv(pipe("sed -n '2~4p' test.csv")) 

2~4p告诉sed每4行得到一次,从第2行开始。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21891841

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档