Выбор столбца dplyr с заполнителем. и вставьте в mutate_at - PullRequest
1 голос
/ 30 марта 2020

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

Для этого я использую mutate_at и так как у меня длинный список переменных.

Это пример:

dat <- data.frame(A=c(1,3,NA), B=c(0,NA,1), A_mean=c(2,2,2), B_mean=c(0.5,0.5,0.5))
dat %>% mutate_at(.vars=c("A", "B"), list(~ case_when(is.na(.) ~ get(paste0(., "_mean")),
                                                          TRUE ~ .)))

Я не понимаю, как сказать dplyr, чтобы выбрать A_mean, B_mean et c.

Ответы [ 2 ]

0 голосов
/ 01 апреля 2020
dat %>% 
  mutate(A = ifelse(is.na(A), coalesce(A_mean), A), 
         B = ifelse(is.na(B), coalesce(B_mean), B))  
0 голосов
/ 30 марта 2020

Мы можем разделить набор данных с помощью split.default на подстроку имен столбцов, а затем выполнить mutate

library(dplyr)
library(purrr)
dat %>%
      split.default(str_remove(names(.), "_.*"))  %>%
      map_dfc(~ .x %>% mutate(!! names(.)[1] := 
         case_when(is.na(!!rlang::sym(names(.)[1])) ~ 
       !! rlang::sym(names(.)[2]), TRUE ~ !!rlang::sym(names(.)[1])
            )))
# A A_mean   B B_mean
#1 1      2 0.0    0.5
#2 3      2 0.5    0.5
#3 2      2 1.0    0.5
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...