我试图从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数据帧合并结果来轻松完成此操作。但是,我知道有一种更简单的方法可以做到这一点。我的印象是有一种方法可以使用应用函数来实现这一点,但我无法弄清楚如何这样做。任何帮助将不胜感激。
答案 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