2016-12-25 66 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))]) 
相關問題