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)中
答
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
似乎与https://github.com/tidyverse/dplyr/issues/2520 –
'filter'有一些问题;它给了我一个data.frame已损坏的警告。它适用于基础子集,但:md2 alistaire