【问题标题】:dplyr filter not working with lubridatedplyr 过滤器不适用于 lubridate
【发布时间】:2017-10-06 18:26:52
【问题描述】:

我无法理解为什么以下代码的行为方式。基本上,过滤器似乎已应用,但在后续调用中无法正常工作。

> library(dplyr)
> library(lubridate)
> 
> md1 <- data.frame(no = 1:4, time = c("12:30:00", "13:30:00", "14:30:00", "15:30:00"))
> md1$time <- hms(md1$time)
> md1
  no       time
1  1 12H 30M 0S
2  2 13H 30M 0S
3  3 14H 30M 0S
4  4 15H 30M 0S
> md2 <- filter(md1, hour(time)<14)
> md2
  no       time
1  1 12H 30M 0S
2  2 13H 30M 0S
> hour(md2$time)
[1] 12 13 14 15

虽然我希望/期望收到 [1] 12 13 在最后一次通话中

欢迎提出任何建议。它在 3.3.1 和 3.4.0 版本的 R (Windows 7) 中的行为相同

【问题讨论】:

  • filter 存在某种错误;它警告我 data.frame 已损坏。不过,它适用于基本子集:md2 &lt;- md1[hour(md2$time) &lt; 14, ]

标签: r filter dplyr lubridate


【解决方案1】:
 md2 <- md1 %>%  
 + mutate(time = format(time, format="%H:%M:%S")) %>%
 + filter(time < "14:00:00")

 md2

 no       time
 1  1 12H 30M 0S
 2  2 13H 30M 0S

md2$time
[1] "12H 30M 0S" "13H 30M 0S"

如果你只想要一个小时

hour(hms(as.character(md2$time)))
[1] 12 13

【讨论】:

  • @JannaMaas 谢谢大家!
  • 你的解决方案是什么?
猜你喜欢
  • 2018-03-03
  • 1970-01-01
  • 2019-07-13
  • 2019-06-18
  • 2018-01-29
  • 1970-01-01
  • 1970-01-01
  • 2014-03-11
  • 2021-07-07
相关资源
最近更新 更多