2016-12-08 16 views
0

私は、花種の嗜好を登録したIDを持つ長い形式のデータセットから相互参照テーブルを作成しようとしています。相互参照表には、すべての花を縦横に表示し、各花ごとに、そのデータセットに基づいて他の花の好きな頻度を表示する必要があります。対象Rで相互参照テーブルを作成するには?

dat <- data.frame(
    ID=rep(1:5, c(3,3,2,1,4)), 
    Flower=c("Azalea","Begonia","Buttercup","Rose","Sunflower")[ 
    c(4,2,5,2,1,3,4,3,1,5,4,3,2) 
    ] 
) 

# ID Flower 
#1 1  Rose 
#2 1 Begonia 
#3 1 Sunflower 
#4 2 Begonia 
#5 2 Azalea 
#6 2 Buttercup 
#7 3  Rose 
#8 3 Buttercup 
#9 4 Azalea 
#10 5 Sunflower 
#11 5  Rose 
#12 5 Buttercup 
#13 5 Begonia 

出力:

enter image description here

+1

あなたはあなたの問題をilustrateするために、単純なデータセットと所望の出力を提供することはできますか? –

+0

データのリクエストにお返事いただきありがとうございますが、画像はあまり役に立ちません。それをもう一度入力しなければならないでしょう。その代わりに、関数 'dput'を使用して、カットアンドペーストできるテキストバージョンを作成してください。 – G5W

+0

@ G5W - 私はOPに代わって編集を行いました - 意図した出力は今は画像である唯一の部分です。それは簡単に問題に答えるのに十分であるはずです。 – thelatemail

答えて

2

一つまっすぐソリューションは、table()crossprod()/tcrossprod()を使用することです:

crossprod(table(dat)) 

#   Flower 
#Flower  Azalea Begonia Buttercup Rose Sunflower 
# Azalea   2  1   1 0   0 
# Begonia  1  3   2 2   2 
# Buttercup  1  2   3 2   1 
# Rose   0  2   2 3   2 
# Sunflower  0  2   1 2   2 
+0

これはまあまあです。私は恥ずかしいほど複雑な答えを投稿していないことを嬉しく思います。 – thelatemail

+2

@thelatemailが困惑したことは決してありませんでした。私の世界は崩壊しています。{ – rawr

+0

@rawr - あなたが私の後ろに座っていたら、私は時間ごとに困惑しています。私を信じて、私はちょうど別のハックです:-) – thelatemail

関連する問題