对于数据框中的所有元素,按组因子

时间:2017-09-18 19:03:46

标签: r

我试图从R中的数据帧计算组内相似和不同邻居的数量,但我希望结果与原始数据帧中的所有单个元素相关。我的起始数据框看起来像这样:

Group  ID
1      A
1      A
1      B
2      A
2      B
3      C

我想要返回两个看起来像这样的向量:

Same  Different
1     1
1     1
0     2
0     1
0     1
0     0

我可以使用循环和一些简单的子集,或者通过一起使用tapply和table,然后根据样本ID和orignal数据帧合并结果来轻松完成此操作。但是,我知道有一种更简单的方法可以做到这一点。我的印象是有一种方法可以使用应用函数来实现这一点,但我无法弄清楚如何这样做。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

这是使用某些标准R函数的方法。我们使用by来"拆分"根据{{​​1}}的数据,我们使用Group函数迭代ID的各个值。其余代码将结果重叠在一起。

sapply

数据

cbind(dat, 
      do.call('rbind', 
              by(dat, dat$Group, function(d) 
                  t(sapply(d$ID, 
                           function(x) c('same' = sum(x == d$ID) - 1, 
                                         'different' = sum(x != d$ID)))))))

  Group ID same different
1     1  A    1         1
2     1  A    1         1
3     1  B    0         2
4     2  A    0         1
5     2  B    0         1
6     3  C    0         0