我有两个不同维度的表,现在我想根据用户ID将值datA $ swl1替换为datB $ swl2中的值。
数据
id swl1
1 0.8
2 0.7
3 0.4
4 0.7
5 0.0
datB
id swl2
1 0.8
3 0.6
5 0.7
输出
datA(此处swl1被swl2中的新值替换,但并非所有id都有新值,对于没有的id,将保留原始值)
id swl1
1 0.8
2 0.7
3 0.6
4 0.7
5 0.7
这该怎么做?
最佳答案
您可以使用merge
来匹配id
,然后在swl1
列中替换datB
中存在的那些项:
datC <- merge(datA, datB, all.x=TRUE)
datC
## id swl1 swl2
## 1 1 0.8 0.8
## 2 2 0.7 NA
## 3 3 0.4 0.6
## 4 4 0.7 NA
## 5 5 0.0 0.7
这与行匹配。现在,将
swl1
列中的那些值替换为NA
列中的non-swl2
值:datC$swl1 <- ifelse(is.na(datC$swl2), datC$swl1, datC$swl2)
datC$swl2 <- NULL
datC
## id swl1
## 1 1 0.8
## 2 2 0.7
## 3 3 0.6
## 4 4 0.7
## 5 5 0.7