Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
对于dataframe中的所有元素,按组因子计算相似和不相似元素的数量_R - Fatal编程技术网

对于dataframe中的所有元素,按组因子计算相似和不相似元素的数量

对于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

我试图从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      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函数是我所缺少的。谢谢。我很高兴它帮助了你。如果解决了你的问题,你可以考虑接受和支持我的解决方案。