2015-01-21 55 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