2016-12-25 107 views
0

我有data.frame,DF,如何替换data.frame中特定行中的多个值?

df=data.frame(col1=1:5, col2=c("human","worm","worm","yeast","human")) 

在列“COL2”,具有字符串如“酵母”,“人”,“蠕虫”,我想用“SCE”,以取代这些,“hsa”,“cel”。我怎样才能做到这一点?

我能做

df[,idx]=lapply(df[,idx],function(x){ gsub(oldname,newname,x) }) 

但这种方法只能一次一个,但我试图把一切都一气呵成,就像一个翻译表,像这样

df[,idx]=lapply(df[,idx],function(x){ gsub(c(oldname1,oldname2), c(newname1,newname2),x) }) 

感谢

+0

请包括样本数据 –

+0

这可能会有帮助:http://stackoverflow.com/questions/ 7547597/dictionary-style-replace-multiple-items – Stedy

+0

@Stedy谢谢。那正是我想要的: –

回答

1

尝试使用因子。

df=data.frame(col1=1:5, col2=c("human","worm","worm","yeast","human")) 
    > df 
     col1 col2 
    1 1 human 
    2 2 worm 
    3 3 worm 
    4 4 yeast 
    5 5 human 

    > df$col2 = as.character(factor(x = df$col2, levels = c('yeast', 'human', 'worm'), labels = c('sce', 'hsa', 'cel'))) 
    > df 
     col1 col2 
    1 1 hsa 
    2 2 cel 
    3 3 cel 
    4 4 sce 
    5 5 hsa 
3
df=data.frame(col1=1:5, col2=c("human","worm","worm","yeast","human")) 
a=c(yeast="sce",human="hsa",worm="cel") 
df$col2 = a[df$col2] 

结果:

> df 
    col1 col2 
1 1 sce 
2 2 hsa 
3 3 hsa 
4 4 cel 
5 5 sce 
1

我们可以使用match

library(dplyr) 
df %>% 
    mutate(col2 = a[match(col2, names(a))])