从嵌套数据框列表中替换数据框变量的值

Replacing values across a data frame's variables from a list of nested data frames

假设我有以下数据框:

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[[.]][[.]]))

"dumb" 方式如下:

df %>% 
  mutate(x = replace_df[["x"]][["x"]],
         y = replace_df[["y"]][["y"]],
         z = replace_df[["z"]][["z"]])

您需要使用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(.))))