【问题标题】:How to create a cross reference table in R? [duplicate]如何在 R 中创建交叉引用表? [复制]
【发布时间】:2016-12-08 21:55:36
【问题描述】:

我正在尝试从具有已注册花卉种类偏好的 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

预期输出:

【问题讨论】:

  • 您能否提供一个简单的数据集和所需的输出来说明您的问题?
  • 感谢回复索取资料的请求,但图片帮助不大。我们将不得不再次输入。相反,请使用函数dput 创建一个我们可以剪切和粘贴的文本版本。
  • @G5W - 我代表 OP 进行了编辑 - 预期的输出是现在唯一的图像部分。这应该足以轻松回答问题。

标签: r cross-reference


【解决方案1】:

一个直接的解决方案是使用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

【讨论】:

  • 那不是什么。我很高兴我现在没有发布令人尴尬的复杂答案。
  • 我从未见过@thelatemail 被难住了,我的世界正在崩溃:{
  • @rawr - 如果你在工作时坐在我身后,你会看到我每小时都被难住。相信我,我只是另一个黑客 :-)
  • @thelatemail 这是我从 SO 中学到的一个不错的技巧,但并不常用。 :)
猜你喜欢
  • 2018-07-06
  • 1970-01-01
  • 1970-01-01
  • 2022-06-14
  • 1970-01-01
  • 2022-01-13
  • 1970-01-01
  • 1970-01-01
  • 2014-04-07
相关资源
最近更新 更多