从嵌套数据框列表中替换数据框变量的值
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(.))))
假设我有以下数据框:
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(.))))