【问题标题】:How can I load specific columns of the .csv file to R? [duplicate]如何将 .csv 文件的特定列加载到 R? [复制]
【发布时间】:2014-04-20 10:42:17
【问题描述】:

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

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

【问题讨论】:

标签: r csv bigdata


【解决方案1】:

如果您的表非常大,请考虑使用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】:

    您可以在加载到 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 搞砸了工作:(
    • 我已更新我的答案以删除双引号和单引号 - 请再看看。
    • 抱歉,我的意思是其中一列是“hello, world, hello”形式的字符串。分隔符是“,”,但它也可以是该字符串的一部分。也许可以将分隔符更改为永远不会出现的东西 - 例如#$?
    • 我不知道您是否可以编辑您的问题,现在它已被标记为重复。如果可以的话,如果您可以显示 3-5 行数据并说出您想要哪些字段,那将很有帮助。如果你不能,欢迎你点击我的个人资料并在那里找到我的电子邮件地址并将其发送给我——尽管在英国这只是睡觉时间,所以我可能只能在明天回答。
    • 我已经更新了我的答案,以展示如何处理 CSV 文件中的双引号字段。
    【解决方案3】:

    在 linux 上,给 'awk' 机会。 它像寄存器一样操作文件。

    您可以查看Using AWK on CSV Files 了解一些策略。

    【讨论】:

      猜你喜欢
      • 2012-10-25
      • 2016-06-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-31
      • 1970-01-01
      • 2019-03-28
      相关资源
      最近更新 更多