如何计算R中数据表中的唯一组合?

时间:2019-04-03 19:11:36

标签: r data.table combinations

我有一个包含三列的数据表。前两个是数据点的集合(可以是A,B或C的分类数据)。第三列是两个数据点的集合,因为它们属于一个集合。我需要获取可能组合的计数,并且需要将“ A&C”与“ C&A”作为同一组的一部分进行计数,因为这些对的顺序无关紧要。

之前,我设置了一个列,将“ CAT1&CAT2”和另一个列为“ CAT2&CAT1”连接起来,希望在那里进行汇总,但是这些数字当然并不能正确地相加。

library(data.table)
dt1 = data.table(CAT1 = c('a','b','c','b','a','c','c','b','a','c'),
                 CAT2 = c('a','b','c','a','b','c','a','b','c','a'))

dt1[,merged := paste(dt1$CAT1, dt1$CAT2, sep = ' & ')]

counts = data.table(table(dt1$merged))

输出表“ counts”为我提供了合并列的所有唯一性,但是我需要在翻转数据点的任何地方进行总结(“ A&C” +“ C&A”)。我知道可以手动完成此操作,但是我要手工完成的实际数据点太多。

3 个答案:

答案 0 :(得分:1)

dt1[,paste(sort(c(CAT1,CAT2)),collapse=" & "),by=1:nrow(dt1)][,table(V1)]

答案 1 :(得分:0)

我对data.table不好,所以这是我对data.frame的回答:

只需在粘贴前对两个CAT进行排序,确保它们始终处于相同顺序。

 dt1$merged<-apply(dt1,1,function(x) paste(sort(x),collapse=" & "))

我确定可以使用更快的方法来处理data.table,但不确定如何。天真的sort添加到您的代码中时出现了错误...

答案 2 :(得分:0)

您还可以执行以下操作- 注意:如@ chinsoon12所述,我们可以使用pminpmax

 > setDT(dt1)[,list(Count=.N) ,paste(pmin(CAT1, CAT2), pmax(CAT1, CAT2), sep=' & ')]
   paste Count
1: a & a     1
2: b & b     2
3: c & c     2
4: a & b     2
5: a & c     3