根据另一个数据集的索引变量替换变量值

Replacing variable values based on index variable from another dataset

我有两个数据集,它们的个案数量不同,但变量数量相同。例如,这个:

test_data <- data.frame(
  var_1 = rep(1, 10),
  index = letters[1:10]
)

other_data <- data.frame(
  var_1 = c(1, 1, 3, 4, 6, 1),
  index = letters[1:6]
)

而我需要的是用other_datavar_1的值替换test_datavar_1中的值。所以最终结果看起来像这样:

> test_data
   var_1 index
1      1     a
2      1     b
3      3     c
4      4     d
5      6     e
6      1     f
7      1     g
8      1     h
9      1     i
10     1     j

我知道 dplyr 很适合处理关系数据,但我无法弄清楚它是 _join 函数之一,可以为我做这件事,还是其他什么?谢谢。

您可以使用合并:

merged <- merge( test_data, other_data, by = c('index'), all.x = TRUE )
merged$var <- ifelse( is.na( merged$var_1.y ) , merged$var_1.x, merged$var_1.y )
merged[ , c('var', 'index')]
   var index
1    1     a
2    1     b
3    3     c
4    4     d
5    6     e
6    1     f
7    1     g
8    1     h
9    1     i
10   1     j

只是为了添加另一个答案: 使用 Base R 和 match.

test_data$var_1=other_data$var_1[match(test_data$index, other_data$index)]
test_data[is.na(test_data)] = 1

   var_1 index
1      1     a
2      1     b
3      3     c
4      4     d
5      6     e
6      1     f
7      1     g
8      1     h
9      1     i
10     1     j

这将匹配 index 下的值以从 other_data 中获取 var_1 的值,然后将 test_data 中的列 var_1 替换为结果值。

将生成 NA,因为 test_dataindex 列中的因子(字母)多于 other_dataindex 中的因子(字母)。那么我们用 1.

替换 NA 值

希望对您有所帮助。