【问题标题】:Filter by column values while reading using read.csv in R [duplicate]在R中使用read.csv读取时按列值过滤[重复]
【发布时间】:2016-12-09 19:06:38
【问题描述】:

我有一个 txt 文件形式的巨大数据集,其中的值由分号分隔,并且有接近 2M 行。我只需要与第一列中特定日期相对应的数据。示例输入如下所示:

Date;Time;Global_active_power;Global_reactive_power;Voltage;Global_intensity;Sub_metering_1;Sub_metering_2;Sub_metering_3
16/12/2006;17:24:00;4.216;0.418;234.840;18.400;0.000;1.000;17.000
16/12/2006;17:25:00;5.360;0.436;233.630;23.000;0.000;1.000;16.000
16/12/2006;17:26:00;5.374;0.498;233.290;23.000;0.000;2.000;17.000

请帮我过滤与两个日期相对应的数据,例如 1/2/2007 和 2/2/2007

【问题讨论】:

  • 通过 col.classes 参数在read.csv 调用中删除列相对容易。如果您的数据按日期排序,您可以找出要手动读取的行集,然后使用 skip 和 nrows 参数读取这些行。
  • 另外,如果这个数据集快要耗尽你的可用内存,你应该看看data.table中的freadread.csv.raw中的read.csv.raw/read.chunk中的iotools。跨度>
  • 和这个问题差不多:stackoverflow.com/questions/24006475/…

标签: r


【解决方案1】:

这是一个关于数据导入期间过滤的好答案:https://stackoverflow.com/a/15967406/1152809

基本上导入时需要使用sqldf进行过滤。这是你需要的东西:

install.packages("sqldf")
library(sqldf)
df <- read.csv.sql("sample.csv", "select *, from file where Date = '01/02/2007' or Date = '2/2/2007 ", sep=";")

但是,我没有对此进行测试,因为您没有向我们提供 dput 您的数据。在 R 上查看 info on how to do a good post 的这篇帖子。

你的日期是字符串,所以他们可以使用上面的。但是,如果您想使用 BETWEEN 等特定于日期的函数,则需要将它们更改为正确的格式。这是一个示例:

df <- read.csv.sql("sample.csv", "select *, strftime('%d/%m/%Y', Date) as DateFormated from file where DateFormatted >= 1/2/2007 and DateFormatted <= 2/2/2007 ", sep=";")

【讨论】:

  • 谢谢特拉维斯。它工作输入
  • select * 后面的逗号是什么意思?
猜你喜欢
  • 2017-08-19
  • 2016-12-30
  • 2019-07-03
  • 2015-05-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-04
  • 1970-01-01
相关资源
最近更新 更多