2017-03-17 39 views
1
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$values1mydata$year(2005:2009)與值mydata1$values2。由於(2005:2009)在mydata$year中重複出現,所以必須進行多次。如何才能做到這一點?與一組值的另一列

回答

1

我們可以做一個加入on '年',並分配(:=)值

library(data.table) 
setDT(mydata)[mydata1, values1 := values2, on = .(year)] 
+1

完美的作品。謝謝 –

+0

@AKR感謝您的意見。你也可以選擇[here](http://stackoverflow.com/help/someone-answers) – akrun

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] 
+0

即使我已經使用過merge,我也無法想到這一點。好技術。謝謝 –

+0

最後一行也可以寫成'm $ values1 [!is.na(m $ values2)] < - m $ values2 [!is.na(m $ values2)]''雖然我不確定這可能是可讀性較差。 – lmo