更改R

时间:2015-11-15 04:01:35

标签: r

我想在一个向量中同时更改一些 列中某些变量的名称。我知道我可以使用数据集中的每个单独值来执行此操作,但这需要数小时。

我有这个数据集:

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

你有快速的方法吗?这是一种在数据集中的查找和替换功能,而不是在脚本中。

谢谢,

3 个答案:

答案 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