2017-05-08 86 views
1

我有麻煩理解爲什麼下面的代碼行爲如何表現。基本上,過濾器似乎被應用,但在隨後的調用中無法工作。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 < - md1 [hour(md2 $ time)<14,]' – alistaire

回答

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

@JannaMaas謝謝大家! – emJay

+0

你的解決方案是什麼? – user2510479