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

时间:2017-10-23 13:15:29

标签: r dplyr relational-database

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

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]
)

我需要的是将var_1中的test_data中的值替换为var_1other_data的值。所以最终结果如下:

> 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函数之一,它会为我做的,还是别的什么?感谢。

2 个答案:

答案 0 :(得分:-1)

您可以使用合并:

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

答案 1 :(得分:-1)

只是添加另一个答案: 使用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下的值以从var_1获取other_data的值,然后将var_1中的列test_data替换为结果值

将生成NA&#39;因为index test_dataindex中的因素(字母)比other_data pip install django==1.11.6 --upgrade --force 更多。那么我们用1替换NA值。

希望它有所帮助。