按日期升序

时间:2019-09-16 18:26:28

标签: r dplyr

我无法按日期升迁我的小组。请帮忙!

df <- data.frame(A = c('a1','a1','b1','b1','b1','c2','d2','d2'),
                B = c("2017-02-20","2018-02-14","2017-02-06","2018-02-27","2017-02-29","2017-02-28","2017-02-09","2017-02-10"))

代码:

df %>% group_by(A) %>% arrange(A,(as.Date(B)))

由于b1未排序,我得到了错误的结果

       A          B
  <fctr>     <fctr>
1     a1 2017-02-20
2     a1 2018-02-14
3     b1 2017-02-06
4     b1 2018-02-27
5     b1 2017-02-29
6     c2 2017-02-28
7     d2 2017-02-09
8     d2 2017-02-10

1 个答案:

答案 0 :(得分:2)

您会看到2017-02-29不是真实的日期,在2017年2月只有28天。因此,当您将B列转换为日期时,它将把该值转换为NA。修正该条目,它应该可以解决您的问题。

此外,您可能不需要group_by A

library(dplyr)
#> 

df <- data.frame(A = c('a1','a1','b1','b1','b1','c2','d2','d2'),
                 B = c("2017-02-20","2018-02-14","2017-02-06","2018-02-27","2017-02-29","2017-02-28","2017-02-09","2017-02-10"))

as.Date(df$B)
#> [1] "2017-02-20" "2018-02-14" "2017-02-06" "2018-02-27" NA          
#> [6] "2017-02-28" "2017-02-09" "2017-02-10"

df%>%arrange(A, as.Date(B))
#>    A          B
#> 1 a1 2017-02-20
#> 2 a1 2018-02-14
#> 3 b1 2017-02-06
#> 4 b1 2018-02-27
#> 5 b1 2017-02-29
#> 6 c2 2017-02-28
#> 7 d2 2017-02-09
#> 8 d2 2017-02-10

reprex package(v0.2.1)于2019-09-16创建