我有一个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) })
由于
答案 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))])