我正在开展一个项目,参与者将图片分组。我的目标是使用R创建一个表格,该表格将显示将图片分类到同一组中的时间数。组名是任意的,将在参与者之间改变。例如,图片2和4可以在用户1的组B中,但在用户2的组C中。我只想知道他们在同一组中的次数。以下是数据外观的示例:
ID Pic1 Pic2 Pic3 Pic4
1 GroupA GroupB GroupA GroupC
2 GroupB GroupA GroupB GroupA
3 GroupC GroupA GroupB GroupC
我想要输出的是:
Pic 1 Pic2 Pic3 Pic4
Pic1 0 2 1
Pic2 0 0 1
Pic3 2 0 0
Pic4 1 1 0
我的猜测是dplyr可以以某种方式做到这一点,但我无法弄清楚当组名改变时如何计算每个用户的共同关系。我可以使用VLookup在Excel中执行此操作,但我想尽可能避免这种情况。有什么想法吗?
答案 0 :(得分:1)
一种选择是使用outer
并使用矢量化比较函数比较列对:
outer(df[-1], df[-1], Vectorize(function(x, y) sum(x == y)))
# Pic1 Pic2 Pic3 Pic4
#Pic1 3 0 2 1
#Pic2 0 3 0 1
#Pic3 2 0 3 0
#Pic4 1 1 0 3
另一个较长的版本,您可以使用Map
:
outer(df[-1], df[-1], function(x, y) Map(function(x, y) sum(x == y), x, y))