我想在一个向量中同时更改一些 列中某些变量的名称。我知道我可以使用数据集中的每个单独值来执行此操作,但这需要数小时。
我有这个数据集:
df=data.frame(species = c("yo.manhereisareallllllylongname",
"heydude.this.is.realllylong",
"sooooooo.long",
"what.whatshouldIdo",
"what.whatshouldIdo",
"shouldIstayorshouldIgo",
"sooooooo.long"),
site = c("site1","site2","site3","site4","site5","site6","site7"))
看起来像这样:
species site
1 yo.manhereisareallllllylongname site1
2 heydude.this.is.realllylong site2
3 sooooooo.long site3
4 what.whatshouldIdo site4
5 what.whatshouldIdo site5
6 shouldIstayorshouldIgo site6
7 sooooooo.long site7
我想创建这个向量(你可以看到我没有重复原始数据集中的对象,它们是唯一的。):
short_names=c("ymrln","heydude","slong","wwsid", "sisosig")
这对应于此:
long_names=c("yo.manhereisareallllllylongname","heydude.this.is.realllylong","sooooooo.long","what.whatshouldIdo","shouldIstayorshouldIgo")
最终结果是:
species site
1 ymrln site1
2 heydude site2
3 slong site3
4 wwsid site4
5 wwsid site5
6 sisosig site6
7 slong site7
你有快速的方法吗?这是一种在数据集中的查找和替换功能,而不是在脚本中。
谢谢,
答案 0 :(得分:3)
您可以使用plyr包中的mapvalues
函数执行此操作。
library(plyr)
df$species <- mapvalues(df$species, long_names, short_names)
答案 1 :(得分:3)
我们也可以使用www
中的loopup
。
library(qdapTools)
根据 library(qdapTools)
df$species <- lookup(df$species, data.frame(long_names, short_names))
df
# species site
#1 ymrln site1
#2 heydude site2
#3 slong site3
#4 wwsid site4
#5 wwsid site5
#6 sisosig site6
#7 slong site7
基于lookup-data.table的哈希表,可用于大型矢量查找。
答案 2 :(得分:2)
试试这个。
match_df <- data.frame(short_names, long_names)
df$species <- match_df$short_names[df2$species]
head(df)
# species site
#1 sisosig site1
#2 ymrln site2
#3 slong site3
#4 wwsid site4
#5 wwsid site5
#6 heydude site6