dplyr过滤器不能用于lubridate

问题描述:

我有麻烦理解为什么下面的代码行为如何表现。基本上,过滤器似乎被应用,但在随后的调用中无法工作。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

似乎与https://github.com/tidyverse/dplyr/issues/2520 –

+0

'filter'有一些问题;它给了我一个data.frame已损坏的警告。它适用于基础子集,但:md2 alistaire

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 
+0

@JannaMaas谢谢大家! – emJay

+0

你的解决方案是什么? – user2510479