2015-11-15 131 views
0

我想在一個向量中更改列中的一些變量的名稱,這些變量同時存在於列中。我知道我可以用數據集中的每個值來完成此操作,但這需要數小時。更改列中值的名稱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 

你有一個快速的方法來做到這一點?這是一種數據集中的查找和替換功能,而不是在腳本中。

感謝,

+2

一種標準方式:'short_names [match(df $ species,long_names)]' – Frank

回答

3

您可以在plyr包mapvalues功能做到這一點。

library(plyr) 
df$species <- mapvalues(df$species, long_names, short_names) 
+0

非常感謝! –

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 
3

我們也可以使用loopuplibrary(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基於哈希表的大載體查找有用。