mydata = data.frame(year=rep(2000:2010,10), values1=rep(letters[1:5],22))
mydata1 = data.frame(year=c(2005:2009),values2=letters[5:9])
我想将mydata$values1
(2005:2009)的所有mydata$year
替换为mydata1$values2
中的值。这必须多次执行,因为(2005:2009)在mydata$year
中重复出现。怎么办呢?
答案 0 :(得分:1)
我们可以加入on
'年'并分配(:=
)值
library(data.table)
setDT(mydata)[mydata1, values1 := values2, on = .(year)]
答案 1 :(得分:1)
这是一个基础R
的解决方案mydata = data.frame(year=rep(2000:2010,10), values1=rep(letters[1:5],22), stringsAsFactors = FALSE)
mydata1 = data.frame(year=c(2005:2009),values2=letters[10:14], stringsAsFactors = FALSE)
m <- merge(mydata, mydata1, all.x=TRUE)
m$values1 <- ifelse(is.na(m$values2), m$values1, m$values2)
对于最后一行,我们可以写:
i <- !is.na(m$values2)
m$values1[i] <- m$values2[i]