如何在R中创建交叉引用表?

时间:2016-12-08 21:55:36

标签: r cross-reference

我正在尝试从长格式的数据集中创建一个交叉引用表,其ID具有已注册的花种偏好。交叉参考表应该垂直和水平列出所有花朵,并且每个花朵显示基于数据集的其他花朵的频率。

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 个答案:

答案 0 :(得分:2)

一个直接的解决方案是将crossprod()/tcrossprod()table()

一起使用
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