对于dataframe中的所有元素,按组因子计算相似和不相似元素的数量
我试图从R中的一个数据帧中计算组内相似和不相似邻居的数量,但我希望结果与原始数据帧中的所有单个元素相关。我的起始数据帧如下所示:对于dataframe中的所有元素,按组因子计算相似和不相似元素的数量,r,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 我想返回两个向量,如下所示: Group ID 1 A 1 A 1 B 2
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
我想返回两个向量,如下所示:
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的结果与原始数据帧合并,来轻松完成这项工作。然而,我知道有一种更简单的方法可以做到这一点。我的印象是,有一种方法可以使用apply函数来实现这一点,但我很难弄清楚如何做到这一点。任何帮助都将不胜感激。这里有一种使用一些标准
R
函数的方法。我们使用by
按Group
对数据进行“拆分”,然后使用sapply
函数对ID
的各个值进行迭代。代码的其余部分将结果叠加在一起
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
数据
dat这里有一种使用一些标准R
函数的方法。我们使用by
按Group
对数据进行“拆分”,然后使用sapply
函数对ID
的各个值进行迭代。代码的其余部分将结果叠加在一起
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
数据
dat您能解释一下输出的逻辑吗?例如,对于第一行,项目ID是A,可在组1中找到。第1组中有一个附加项目A(第2行)和一个项目B(第3行)。因此,对于第一行,有一个相同的项目和一个不同的项目。您能解释一下输出的逻辑吗?例如,对于第一行,项目ID是A,可以在组1中找到。第1组中有一个附加项目A(第2行)和一个项目B(第3行)。因此,对于第一排,有一个相同的项目和一个不同的项目。非常感谢!by函数是我所缺少的。谢谢。我很高兴它帮助了你。如果你解决了你的问题,你可以考虑接受和支持我的解决方案。非常感谢!by函数是我所缺少的。谢谢。我很高兴它帮助了你。如果解决了你的问题,你可以考虑接受和支持我的解决方案。