如何将.csv文件的特定列加载到R中?

3

我有一个非常大的数据集,存储为.csv文件,但它无法全部载入内存。不过,我只需要其中的3列,这些列可以载入内存。我该如何加载这些列呢?

更新: 我该如何通过列名而不是列索引来选择列?我不知道它们的索引。


你可以看一下这个链接:https://dev59.com/pm025IYBdhLWcg3wzZT3,我在那里发布了另一个解决方案。 - Rahul Premraj
3个回答

5

如果您的表格非常大,请考虑使用 data.table 包:

# create an example: 10,000 rows by 100 columns
df <- data.frame(matrix(rnorm(1e6),ncol=100))
write.csv(df,"sample.csv",row.names=F)

library(data.table)
dt <- fread("sample.csv",select=c(3,8,20))
head(dt)
#            X3         X8         X20
# 1:  0.5537762  1.0271272 -0.14437400
# 2: -0.4111327 -0.2297311 -1.04998490
# 3: -1.2540440  0.6977565 -0.21514021
# 4: -1.1500974 -0.3181102 -0.07910133
# 5: -0.6549245  1.8385510  0.73741980
# 6:  0.8049360  0.4722533 -0.65750679

这个代码只读取第3、8和20列,速度非常快。


3

在加载到R之前,您可以使用awk进行预处理吗?如果可以的话,比如您想要第2、3和5列,您可以执行以下操作:

awk '{print $2,$3,$5}' yourfile.csv > cols23and5.csv

如果您的CSV文件带引号(例如,因为某些字段包含逗号),并且看起来像这样:
"Field 1","Field 2, with commas, in it","Field 3","Field 4, also with commas,,,"
"Field 1","Field 2, with commas, in it","Field 3","Field 4, also with commas,,,"

你可以删除双引号并将字段分隔符从逗号更改为冒号,例如:
sed -e 's/","/:/g' -e 's/"//g' yourfile.csv > ColonSeparated.csv

这样你的文件就变成了:

Field 1:Field 2, with commas, in it:Field 3:Field 4, also with commas,,,
Field 1:Field 2, with commas, in it:Field 3:Field 4, also with commas,,,

然后,您可以使用冒号作为分隔符,不必担心嵌入逗号的情况,使用awk处理它:

awk -F: '{print $2,FS,$3,FS,$4}' ColonSeparated.csv   > SmallFileForR.csv

我的文件中有引号字符串,因此awk无法正常工作 :( - P.Escondido
我已经更新了我的答案,删除了双引号和单引号 - 请再看一遍。 - Mark Setchell
抱歉,我的意思是其中一列是形如“hello, world, hello”的字符串。分隔符为“,”,但它也可能是该字符串的一部分。也许可以将分隔符更改为从未出现过的内容 - 例如#$?。 - P.Escondido
我不知道你是否可以在问题被标记为重复后编辑它。如果可以的话,如果您能展示3-5行数据并说明您想要哪些字段,那将会非常有帮助。如果不能编辑,欢迎您点击我的个人资料,在那里找到我的电子邮件地址并将其发送给我 - 尽管现在英国已经快到睡觉时间了,所以我可能只能明天回答。 - Mark Setchell
我已经更新了我的答案,展示了如何处理CSV文件中的双引号字段。 - Mark Setchell

0
在Linux上,给'awk'一个机会。它可以像寄存器一样操作文件。
您可以查看在CSV文件上使用AWK获取一些策略。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接