2013-10-09 37 views
21

我需要将多行两列data.frame转换为命名字符向量。 我data.frame会是这样的:将数据帧的两列转换为命名向量

dd = data.frame(crit = c("a","b","c","d"), 
       name = c("Alpha", "Beta", "Caesar", "Doris") 
       ) 

,我真正需要是什么:

whatiwant = c("a" = "Alpha", 
       "b" = "Beta", 
       "c" = "Caesar", 
       "d" = "Doris") 

回答

34

使用names功能:

whatyouwant <- as.character(dd$name) 
names(whatyouwant) <- dd$crit 

as.character是必要的,因为data.frameread.table用默认设置将字符转换为因子。

如果你想要一个班轮:

whatyouwant <- setNames(as.character(dd$name), dd$crit) 
11

您可以从dd$name做载体,并使用names()加名字,但你可以用structure()做到这一切在一个步:

whatiwant <- structure(as.character(dd$name), names = as.character(dd$crit)) 
4

对于品种,试着splitunlist

unlist(split(as.character(dd$name), dd$crit)) 
#  a  b  c  d 
# "Alpha" "Beta" "Caesar" "Doris" 
+0

应该指出的是,通过向它们附加一个数字,这使得重复名称是唯一的。对于大型媒体来说它也不是很有效率。 – Roland

相关问题