假设我有以下数据框:
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"]])
答案 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