在分组项目中计算coccurance

时间:2017-01-19 15:47:38

标签: r

我正在开展一个项目,参与者将图片分组。我的目标是使用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中执行此操作,但我想尽可能避免这种情况。有什么想法吗?

1 个答案:

答案 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))