Предположим, у меня есть кадр данных с множеством столбцов: var1
, ..., var100
, а также совпадающие именованные векторы той же длины.
Я хотел бы создать функцию, которая, если во фрейме данных есть NA, он будет выбирать данные из названного вектора. Вот что я написал до сих пор:
data %>%
mutate(var1 = ifelse(is.na(var1), named_vec["var1"], var1),
var2 = ifelse(is.na(var2), named_vec["var2"], var2),
...)
Это работает, однако, если у меня есть переменная 100, было бы очень непрактично писать так много условий. Затем я попробовал это:
data %>%
mutate_if(~ifelse(is.na(.x), named_vec[colnames(.x)], .x))
Error in selected[[i]] <- eval_tidy(.p(column, ...)) :
more elements supplied than there are to replace
Однако это не работает. Есть ли в dplyr способ извлечь имя столбца, могу ли я разрезать именованный вектор?
Вот небольшой пример данных, которые нужно попробовать
data <- data.frame(var1 = c(1, 1, NA, 1),
var2 = c(2, NA, NA, 2),
var3 = c(3, 3, 3, NA))
named_vec <- c("var1" = 1, "var2" = 2, "var3" = 3)