如何使用循环将多个变量替换为 R 中另一个数据帧中的多个变量?

How to replace several variables with several variables from another dataframe in R using a loop?

我想用 R 中第二个数据框的变量替换多个变量。

df1$var1 <- df2$var1
df1$var2 <- df2$var2

# and so on ...

如您所见,两个数据框中的变量名称相同,但是,数值略有不同,而正确的版本在 df2 中,但需要在 df1 中。我需要对一个复杂数据集中的许多变量执行此操作,想知道是否有人可以提供更有效的编码方法(可能不使用列引用)。

这里是一些示例数据:

# dataframe 1
var1 <- c(1:10)
var2 <- c(1:10)
df1 <- data.frame(var1,var2)

# dataframe 2
var1 <- c(11:20)
var2 <- c(11:20)
df2 <- data.frame(var1,var2)

# assigning correct values
df1$var1 <- df2$var1
df1$var2 <- df2$var2

正如 Parfait 所说,当前的 post 似乎过于简单,无法提供任何即时帮助,但我会尝试总结一下您可能需要什么才能让这样的东西起作用。

如果假设 df1df2 具有相同的行数并且它们的顺序已经匹配,那么您可以通过以下子集表示法非常轻松地实现这一点:

df1[,c({column names df1}), drop = FALSE] <- df2[, c({column names df2}), drop = FALSE]

假设 df1 有列 abc,并且您想将 bc 替换为df1 的两列,其列为 xyz.

df1[,c("b","c"), drop = FALSE] <- df2[, c("y", "z"), drop = FALSE]

在这里,我们将 b 替换为 y,将 c 替换为 zdrop 参数只是为了防止对 data.frame 进行子集化以确保您不会获得向量。

如果您不知道顺序是否正确,或者一个数据框的大小可能与另一个不同,但两个 data.frame 之间有一个唯一标识符 - 那么我个人会使用一个函数专为合并两个数据帧而设计。根据您的偏好,您可以使用基础中的 merge 或使用 dplyr 包中的 *_join 函数(我的偏好)。

library(dplyr)
#assuming a and x are unique identifiers that can be matched.
new_df <- left_join(df1, df2, by = c("a"="x"))