Замена значений в переменных фрейма данных из списка вложенных фреймов данных
Предположим, у меня есть следующий фрейм данных:
df <- data.frame(x = rnorm(10), y = rnorm(10), z = rnorm(10))
И я хотел бы заменить значения в переменных на соответствующий им фрейм данных и имена переменных в следующем списке:
replace_df <- list(x = data.frame(x = 1:10),
y = data.frame(y = 11:20),
z = data.frame(z = 21:30))
Как бы я это сделал, используя dplyr
?
Я чувствую, что моя проблема связана с этими вопросами и ответами, но я не смог правильно применить ответы на этот вопрос в моей ситуации.
Я пробовал ниже, среди прочего, безуспешно:
library(tidyverse)
variables <- c("x", "y", "z")
df %>%
mutate_at(vars(variables), funs(replace_df[[.]][[.]]))
"Тупой" путь будет следующим:
df %>%
mutate(x = replace_df[["x"]][["x"]],
y = replace_df[["y"]][["y"]],
z = replace_df[["z"]][["z"]])
1 ответ
Решение
Вам нужно использовать expr
! Я не уверен, что подмножество будет работать так, как вы пытались выше, но я смог получить правильный вывод, сделав простую функцию и передав аргумент, который был заключен в expr()
df <- data.frame(x = rnorm(10), y = rnorm(10), z = rnorm(10))
replace_df <- list(x = data.frame(x = 1:10),
y = data.frame(y = 11:20),
z = data.frame(z = 21:30))
my_func <- function(string) {
return(
replace_df[[string]][[string]]
)
}
df %>%
mutate_at(vars(x, y, z), funs(my_func(expr(.))))