[英]replacing values in a column with another column R
我有兩個不同維度的表,現在我想根據userids用datB $ swl2中的值替換值datA $ swl1。
數據
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 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
從列值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
您可以使用一行代碼獲取此結果:
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%
運算符,我們選擇屬於具有與datB
列出的id
相同的行的列datA$swl1
的條目。 然后, datA$swl1
列中的這些值將datA$swl1
的swl2
列的datB
。
IIUC,使用data.table v1.9.5
:
require(data.table)
setDT(datA)[datB, swl1 := swl2, on = "id"]
datA
通過引用更新。
如果您想選擇最大值,無論它在哪一列,您都可以嘗試
library(dplyr)
datA <- data.frame(id=c(1,2,3,4,5), swl1=c(0.8, 0.7, 0.4, 0.7, 0.0))
datB <- data.frame(id=c(1,3,5), somename=c(0.8, 0.6, 0.7))
datC <- full_join(datA, datB)
datA <- data.frame(id=c(1:5))
datA$swli1 <- apply(datC[, c('swl1', 'somename')], 1, function(x) max(na.omit(x)))
> datA
id swli1
1 1 0.8
2 2 0.7
3 3 0.6
4 4 0.7
5 5 0.7
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.