2013-10-09 15 views
21

複数行の2列のdata.frameを名前付き文字ベクトルに変換する必要があります。 マイdata.frameはのようになります。データフレームの2つの列を名前付きベクトルに変換する

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機能を使用しますので、data.frameread.table

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

as.characterが必要であり、デフォルト設定で文字を要素に変換します。

あなたはワンライナーをしたい場合:

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

関連する問題