簡體   English   中英

用另一列R替換列中的值

[英]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$swl1swl2列的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM