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

时间:2014-03-14 22:27:28

标签: r csv bigdata

我有一个巨大的数据集存储为.csv文件,它不适合内存。但是,我只需要数据集中的3列,这些列适合内存。我该如何加载它们?

UPD: 我可以按名称而不是按列索引选择列吗?我不知道他们的指数是先验的

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:2)

如果您的表格非常大,请考虑使用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列,速度非常快。

答案 2 :(得分:0)

在Linux上,有机会&#39; awk&#39;。 它操纵寄存器等文件。

您可以查看Using AWK on CSV Files的某些策略。