如何使用循环将多个变量替换为 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 似乎过于简单,无法提供任何即时帮助,但我会尝试总结一下您可能需要什么才能让这样的东西起作用。
如果假设 df1
和 df2
具有相同的行数并且它们的顺序已经匹配,那么您可以通过以下子集表示法非常轻松地实现这一点:
df1[,c({column names df1}), drop = FALSE] <- df2[, c({column names df2}), drop = FALSE]
假设 df1
有列 a
、b
和 c
,并且您想将 b
和 c
替换为df1
的两列,其列为 x
、y
、z
.
df1[,c("b","c"), drop = FALSE] <- df2[, c("y", "z"), drop = FALSE]
在这里,我们将 b
替换为 y
,将 c
替换为 z
。 drop
参数只是为了防止对 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"))
我想用 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 似乎过于简单,无法提供任何即时帮助,但我会尝试总结一下您可能需要什么才能让这样的东西起作用。
如果假设 df1
和 df2
具有相同的行数并且它们的顺序已经匹配,那么您可以通过以下子集表示法非常轻松地实现这一点:
df1[,c({column names df1}), drop = FALSE] <- df2[, c({column names df2}), drop = FALSE]
假设 df1
有列 a
、b
和 c
,并且您想将 b
和 c
替换为df1
的两列,其列为 x
、y
、z
.
df1[,c("b","c"), drop = FALSE] <- df2[, c("y", "z"), drop = FALSE]
在这里,我们将 b
替换为 y
,将 c
替换为 z
。 drop
参数只是为了防止对 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"))