2011-12-15 7 views
0

これはおそらく非常に些細な質問ですが...私は、このような表があります:私はこれにそれを変換したいテキストのキャストはどうですか?

tbl1 <- data.frame(rbind(
c("N1","G1","a"), 
c("N1","G1","b"), 
c("N1","G2","d"), 
c("N2","G1","e"), 
c("N2","G1","f"), 
c("N2","G2","g") 
)) 

を:

X1 | G1   | G2 

N1 | c("a","b") | "d" 

N2 | c("e","f") | "g" 

私はこれがあると思っています行く方向、しかし、 "?"に設定される?

tbl2 <- data.frame(cast(tbl1,X1~X2, value="X3", ?)) 

[r]への寄稿をありがとうStack Overflow!結果の印刷されたバージョンは、一見少し奇妙に見えますが、

/クリス・

+0

にですあなたの欲求の出力はdata.frameではないので、簡単な質問ではありません。したがって、2つのオプションがあります:itna data.frameを作成します。ここでは、2倍の要素は実際には1つの文字要素です。リストにする(長方形でなくてもかまいません)。都合の良いことに、あなたにはそれぞれのソリューションの1つが提供されています。 –

答えて

3

これは実際には、あなたが求めているものを行います。 (もちろん、それをうまく印刷することの難しさは、これがdata.frameであり、いくつかの "セル"が複数の要素を持つベクトルであるということです)。

あなたはそれが(むしろそれが生成するプリント物の場合よりも)含まれていた情報のためにこれを必要とする場合は特に、それはまだうまく自分の目的を果たすことができます:

tbl2 <- with(tbl1, 
      tapply(as.character(X3), 
        INDEX = list(X1, X2), 
        FUN = I)) 
# Equivalently: FUN = function(X) X)) 

# Examine the resulting data.frame 
tbl2 
# G1   G2 
# N1 Character,2 "d" 
# N2 Character,2 "g" 

# Extract particular elements 
tbl2[["N1", "G1"]] 
# [1] "a" "b" 

tbl2[["N2", "G2"]] 
# [1] "g" 
4

別の解決策

library(reshape2) 
dcast(tbl1, X1 ~ X2, fun.aggregate= function(x) paste(x, collapse = ",")) 
関連する問題