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

时间:2016-12-25 01:27:11

标签: r

我有一个data.frame,df,

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) })

由于

3 个答案:

答案 0 :(得分: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 :(得分: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

答案 2 :(得分:1)

我们可以使用match

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