dplyr过滤器不使用lubridate

时间:2017-05-08 16:40:19

标签: r filter dplyr lubridate

我很难理解为什么下面的代码表现出它的行为方式。基本上,过滤器似乎已应用但后来无法在后续调用中工作。

> 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)

中的行为相同

1 个答案:

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