我正在尝试从长格式的数据集中创建一个交叉引用表,其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
预期输出:
答案 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