在R.可重复的示例中,我需要替换与数据帧中特定列的元素匹配的向量元素:
a<-c("A","B","C","D")
b<-data.frame(col1=c("B","C","E"),col2=c("T","Y","N"))
我需要得到以下向量:
new<-c("A","T","Y","D")
我试过的是:
new <- a
new <- b$col2[match(a, b$col1)]
它执行替换,但将不匹配的元素转换为NAs。任何帮助都是非常感谢的。
发布于 2019-09-25 07:11:18
您可以在基本R中使用replace
:
a<-c("A","B","C","D")
b<-data.frame(col1=c("B","C","E"),col2=c("T","Y","N"), stringsAsFactors = F)
replace(a, which(a %in% b$col1), b$col2[b$col1 %in% a])
#[1] "A" "T" "Y" "D"
发布于 2019-09-25 06:23:28
您可以从data.table中创建一个a
,然后只更新与b
连接时匹配的行。
library(data.table)
setDT(b)
data.table(a)[b, on = .(a = col1), a := i.col2][]
# a
# 1: A
# 2: T
# 3: Y
# 4: D
在基本R中,您可以使用当前的方法,但是可以用NA
的元素替换a
的元素,使用ifelse
temp <- as.character(b$col2[match(a, b$col1)])
ifelse(is.na(temp), a, temp)
# [1] "A" "T" "Y" "D"
https://stackoverflow.com/questions/58100572
复制