【问题标题】:Filtering a data frame by date in R在R中按日期过滤数据框
【发布时间】:2014-02-28 16:12:25
【问题描述】:

在 R 中,我将数据从制表符分隔的文本文件导入到 data.frame。 该表如下所示:

latitude longitude date         temperature
-------- --------- ------       -----------
50.45989 15.363366 "2014-01-29" -14.4
50.00911 15.323255 "2014-01-30" -10.2
50.88900 15.440032 "2014-01-29" -14.4

当我写命令时:

str(mydata)

我得到以下结果:

'data.frame':   211931 obs. of  10 variables:
$ latitude      : num  50.8 50.8 50.8 50.8 50.8 ...
$ longitude: num  15.6 15.6 15.6 15.6 15.6 ...
$ date : Factor w/ 581 levels "2012-07-01","2012-07-02",..: 1 2 3 4 5 6 7 8 9 10 ...
$ temperature  : num  -14.4.6 -15.5 -10.1 -9.2 NA ...

我想创建仅包含日期等于 2014 年 1 月 29 日的行的数据框子集。如何在 R 中执行此操作?

我尝试了命令:

datefilter = as.Date("2014-01-29")
selection = mydata[mydata[date]==datefilter]

但是 R 抱怨:无法将类型“因子”转换为“日期”。

【问题讨论】:

  • 您应该在尝试过滤器之前将$ date 转换为日期格式

标签: r date subset


【解决方案1】:

str() 的输出告诉您,您的日期列已作为一个因素读入 R,而不是日期列。实际上,您收到的错误消息明确显示“无法将类型“因子”转换为“日期””。当然,并不是说不可能,R 只是可以自动完成,因为日期可以是任意数量的不同格式。

因此,您只需将日期列转换为实际的日期格式。你会想做:

mydata$date <- as.Date(mydata$date)

另一种方法是在数据导入时处理转换。这可以通过read.tablecolClasses 参数来完成,在您的情况下,您似乎想要使用类似的东西:

read.table(...,colClasses = c("numeric","numeric","Date","numeric"))

【讨论】:

  • as.Date(dat$date) 为我工作。你有一个例子,它会强制转换为整数然后应用as.Date
  • @rawr 不。我只是忘了as.Date.factor 已经为你调用了as.character
  • 我尝试使用 colClasses 参数建议:read.table(...,colClasses = c("numeric","numeric","Date","numeric")) 现在,当我这样做时,str(mydata) R 显示我的“日期”列是“日期”类型,我没有得到“无法转换”迄今为止的因素'错误。
【解决方案2】:

我认为这段代码应该可以工作:

library(dplyr)
desired.subset <- data.frame %>% filter(date == '2014-01-14')

【讨论】:

    猜你喜欢
    • 2016-08-03
    • 1970-01-01
    • 2018-06-24
    • 1970-01-01
    • 2021-01-16
    • 2018-09-29
    • 1970-01-01
    • 2019-11-27
    相关资源
    最近更新 更多