Работает ли top_n () для <Date>типов классов данных? - PullRequest
0 голосов
/ 25 октября 2019
set.seed(1)
library(tidyverse)
df <- tibble(col1 = c(rep("a", 4), c(rep("b", 4))),
             col2 = as.Date(c("2019-01-01", "2019-02-01", "2019-03-01", 
                              "2019-04-01", "2019-01-01", "2019-02-01", 
                              "2019-03-01", "2019-04-01")),
             col3 = runif(8))
#> # A tibble: 8 x 3
#>   col1  col2        col3
#>   <chr> <date>     <dbl>
#> 1 a     2019-01-01 0.266
#> 2 a     2019-02-01 0.372
#> 3 a     2019-03-01 0.573
#> 4 a     2019-04-01 0.908
#> 5 b     2019-01-01 0.202
#> 6 b     2019-02-01 0.898
#> 7 b     2019-03-01 0.945
#> 8 b     2019-04-01 0.661

Я хочу отфильтровать самый новый месяц из каждой группы в приведенном выше фрейме данных (отфильтровать 2019-04-01). Я думал, что код dplyr ниже поможет. Но dplyr::top_n(), похоже, не работает на моем col2. Это потому что col2 это класс 'date'? Что за странное предупреждение? И наконец, как только я получу какой-то рабочий код, могу ли я использовать dplyr::top_n(-1, col2) вместо dplyr::top_n(3, col2), чтобы избавиться от наибольшего значения?

df %>% group_by(col1) %>% top_n(col2, 3)
#> # A tibble: 8 x 3
#> # Groups:   col1 [2]
#>   col1  col2         col3
#>   <chr> <date>      <dbl>
#> 1 a     2019-01-01 0.629 
#> 2 a     2019-02-01 0.0618
#> 3 a     2019-03-01 0.206 
#> 4 a     2019-04-01 0.177 
#> 5 b     2019-01-01 0.687 
#> 6 b     2019-02-01 0.384 
#> 7 b     2019-03-01 0.770 
#> 8 b     2019-04-01 0.498 
#> Warning messages:
#> 1: In if (n > 0) { :
#>   the condition has length > 1 and only the first element will be used
#> 2: In if (n > 0) { :
#>   the condition has length > 1 and only the first element will be used

1 Ответ

0 голосов
/ 25 октября 2019

Благодаря @Gregor у меня просто отменили заказы.

df %>% group_by(col1) %>% top_n(col2, 3)  # wrong order

должно было быть:

df %>% group_by(col1) %>% top_n(3, col2)  # right order

или я мог бы быть тщательным и назвать аргументы:

df %>% group_by(col1) %>% top_n(wt = col2, n = 3)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...