我有两个不同维度的表,现在我想根据用户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

10-06 00:05