我有两个不同维度的表,现在我希望根据userids将值数据$swl1 1替换为datB$swl1 2中的值。
datA
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中的新值所取代,但并不是所有的in都有一个新的值,对于没有的in,则保留原始值)
id swl1
1 0.8
2 0.7
3 0.6
4 0.7
5 0.7
怎么做?
发布于 2015-08-26 18:57:04
您可以使用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
中的这些值替换为来自swl2
列的非NA
值。
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
发布于 2015-08-28 07:54:04
您可以使用一行代码获得此结果:
datA$swl1[datA$id %in% datB$id] <- datB$swl2
#> datA
# id swl1
#1 1 0.8
#2 2 0.7
#3 3 0.6
#4 4 0.7
#5 5 0.7
使用%in%
运算符,我们选择列datA$swl1
的条目,这些条目属于与datB
中列出的行具有相同id
的行。然后将datA$swl1
列中的这些值替换为datB
的swl2
列的条目。
发布于 2015-08-28 08:14:55
https://stackoverflow.com/questions/32239581
复制