2015-01-21 54 views
1

想到我可以輕鬆解決問題,我將使用elseif替換整個數據集中的id代碼。我有一個id列的特定數據集。我必須用更新的ID替換這些舊的ID,但是有50K +行與270個唯一ID。於是,我第一次嘗試:有條件的替換列內容 - 許多要更新的ID

df$id<- ifelse(df$id== 2, 1, 
ifelse(df$id== 3, 5, 
ifelse(df$id == 4, 5, 
ifelse(df$id== 6, NA, 
ifelse(df$id== 7, 7, 
ifelse(df$id== 285, NA, 
ifelse(df$id== 8, 10,..... 
ifelse(df$id=200, 19, df$id) 

雖然這會工作,我僅限於51個巢,我不能把它們分開,因爲這只是一個集合的1/4。然後,隨着代碼重疊,前半部分的更新會受到干擾。

我又試圖

df$id[df$id== 2] <- 1 

,我要做的事情,對於每一個代碼。但是,如果我將所有二進制更新爲一,還有一個後來的代碼,其中舊的和新的「1」將變成X號,而我只希望舊的「1」變成X ......我其實認爲這需要如果沒有,即使51不是極限。一個類似於Excel中的vlookup的函數?有任何想法嗎?

謝謝!

老論壇與替換單元格內容有關,但在我的情況下不起作用。

Replace contents of factor column in R dataframe

+1

創建索引和替換值的命名的矢量和由'DF $ id'索引它 – hrbrmstr 2015-01-21 02:02:44

回答

1

部分示例

df <- data.frame(id=seq(1, 10)) 
old.id <- c(2, 3, 4, 6) 
new.id <- c(1, 5, 5, NA) 

df$id[df$id %in% old.id] <- new.id[unlist(sapply(df$id, function(x) which(old.id==x)))] 

輸出

> df 
    id 
1 1 
2 1 
3 5 
4 5 
5 5 
6 NA 
7 7 
8 8 
9 9 
10 10