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

时间:2018-11-21 21:35:29

标签: r dplyr rlang

假设我有以下数据框:

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来做到这一点?

我觉得我的问题与此Q&A有关,但是我无法根据我的情况正确实施该问题的答案。

我尝试了以下尝试,但没有成功:

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 个答案:

答案 0 :(得分:2)

您需要使用dict!我不确定子集是否可以像您上面尝试的那样工作,但是我可以通过创建一个简单的函数并传入包装在In [131]: {((x0, y0), x1): (x, y) for ((x0, x1), x), ((y0, y1), y) in zip(sorted(x.items()), sorted(y.items()))} Out[131]: {(('x0', 'y0'), '0'): ('x0', 'y1'), (('x0', 'y0'), '1'): ('x1', 'y1'), (('x1', 'y1'), '0'): ('x1', 'y0'), (('x1', 'y1'), '1'): ('x0', 'y0')}

中的参数来获得正确的输出
expr