R - ошибка вычисления среднего значения по группе - PullRequest
0 голосов
/ 26 февраля 2019

Я пытаюсь вычислить интерполированную медиану по группе для ряда переменных.Мой фрейм данных выглядит следующим образом:

# A tibble: 6 x 8
  id            eu_image eu_insurance eurobonds free_movement_welfare eu_cn_solidarity country_code country_party_mass
  <chr>            <dbl>        <dbl>     <dbl>                 <dbl>            <dbl> <dbl+lbl>    <chr>             
1 CAWI200000100        4            4         4                     3                3 2            germany_7         
2 CAWI300000784        2            2         1                     1                1 3            italy_9           
3 CAWI100000787        3            3         2                     2                3 1            france_13         
4 CAWI500000081        3            2         2                     1                3 5            spain_2           
5 CATI500000067        4            3         2                     2                6 5            spain_3           
6 CAWI100000398        2            4         4                     2                5 1            france_2 

Когда я запускаю следующий код для вычисления интерполированного среднего по переменной группировки country_party_mass :

party_median <- newdata %>%
    group_by(country_party_mass) %>%
    dplyr::summarise_at(c(   "eu_image", 
                      "eu_cn_solidarity", 
                      "eurobonds", 
                      "free_movement_welfare", 
                      "eu_insurance"), 
    funs(interp.median(., na.rm=TRUE))) %>%
    as.data.frame()

Я получаю следующую ошибку :

Ошибка в summarise_impl (.data, точки): столбец eu_cn_solidarity должен иметь длину 1 (итоговое значение), а не 0

Я проверил предыдущие вопросы по схожим вопросам, но не смог найти жизнеспособного решения.

1 Ответ

0 голосов
/ 26 февраля 2019

Опираясь на комментарий А. Сулимана: вы можете добавить функцию ifelse, чтобы проверить, все ли записи NA:

party_median <- newdata %>%
    group_by(country_party_mass) %>%
    dplyr::summarise_at(vars(c("eu_image", 
                      "eu_cn_solidarity", 
                      "eurobonds", 
                      "free_movement_welfare", 
                      "eu_insurance")), 
    ~ifelse(all(is.na(.)), NA_real_, interp.median(., na.rm=TRUE)))

Обратите внимание, что функция funs теперь мягко устарела (какdplyr 0.8.0.1), поэтому вместо этого я использую обозначение "~".Также я использую функцию vars для выбора переменных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...