Новый столбец возвращает наибольшее значение в сгруппированных данных - PullRequest
0 голосов
/ 04 февраля 2020

Если у идентификатора есть более одного ВОЗРАСТА в течение одного года и месяца, я хочу поместить наибольшее из наблюдаемого ВОЗРАСТА в новый столбец "MAX_AGE".

library(tidyverse)

ID <- c(1,1,1,2,2,2,2,3,3)
YEAR <- c(2019,2019,2019,2019,2019,2019,2019,2019,2019)
MONTH <- c(3,3,3,6,6,6,7,2,2)
AGE <- c(18,18,19,10,10,11,11,33,33)

tb <- tibble(ID, YEAR, MONTH, AGE)

tb %>%
    group_by(ID, YEAR, MONTH) %>%
    mutate(max_age = case_when(n_distinct(AGE) != 1 ~ top_n(1,AGE),
                               n_distinct(AGE) == 1 ~ as.numeric(AGE),
                               TRUE ~ NA_character_))

Я получаю следующая ошибка. Любая помощь понимание / устранение неполадок очень ценится. Я хотел бы, чтобы решение с использованием dplyr, если это возможно.

Error in UseMethod("tbl_vars") : 
  no applicable method for 'tbl_vars' applied to an object of class "c('double', 'numeric')" 

Ответы [ 2 ]

2 голосов
/ 04 февраля 2020

Разве ты не можешь просто сделать

tb %>% group_by(ID, YEAR, MONTH) %>% mutate(max_age = max(AGE))
#> # A tibble: 9 x 5
#> # Groups:   ID, YEAR, MONTH [4]
#>      ID  YEAR MONTH   AGE max_age
#>   <dbl> <dbl> <dbl> <dbl>   <dbl>
#> 1     1  2019     3    18      19
#> 2     1  2019     3    18      19
#> 3     1  2019     3    19      19
#> 4     2  2019     6    10      11
#> 5     2  2019     6    10      11
#> 6     2  2019     6    11      11
#> 7     2  2019     7    11      11
#> 8     3  2019     2    33      33
#> 9     3  2019     2    33      33

1 голос
/ 04 февраля 2020

top_n() - это функция, которая возвращает tibble. Кроме того, вам не нужно приводить AGE к numeric, поскольку он уже относится к этому типу. И, наконец, поскольку вам нужна цифра c в конце, вам нужно использовать NA_real_, а не NA_character_

, вы можете изменить свой код следующим образом:

tb %>%
  group_by(ID, YEAR, MONTH) %>%
  mutate(max_age = case_when(n_distinct(AGE) != 1 ~ max(AGE),
                             n_distinct(AGE) == 1 ~ AGE,
                             TRUE ~ NA_real_))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...