尝试分组,返回指定的值,并将R中另一个值的行求和

问题描述 投票:0回答:1

我认为我的想法正确,但可以使用一些帮助。我有类似下面的内容,试图在其中查找ID3的分子和分母。

我拥有wantdennum以外的所有内容。

want是基于IDID2 == 0时的目标group

num是出现的分子,其中给定的ID3的val == 1乘以want(例如,ID3 == 1与F和B关联,B与val == 1关联,因此是分子对于ID3 == 1,则ID为1,分母为2),并且den是给定ID3的出现次数的分母。

我想我可以通过使用ID3的den的UniqueN来解决want,但不确定如何获取num

请帮助我解决需求,数量和数量!


df<-data.frame(ID=c('A', 'B', 'A', 'C', 'C', 'D', 'E', 'F'),
               ID2=c(1, 0, 1, 1, 1, 0, 1, 0),
               ID3=c(1,2,3,4,5,6,1,2),
               group=c(1,1,1,2,2,2, 3, 3),
               val=c(1,1,1,0,0,0,0,0),
               want=c('B','B','B','D', 'D', 'D', 'F', 'F'),
               den=c(2,2,1,1,1,1,2,2),
               num=c(1,1,0,0,0,0,1,1))

df

  ID ID2 ID3 group val want den num
1  A   1   1     1   1    B   2   1
2  B   0   2     1   1    B   2   1
3  A   1   3     1   1    B   1   0
4  C   1   4     2   0    D   1   0
5  C   1   5     2   0    D   1   0
6  D   0   6     2   0    D   1   0
7  E   1   1     3   0    F   2   1
8  F   0   2     3   0    F   2   1
r
1个回答
0
投票

我们可以进行比较以将值分组后的子集进行比较

library(dplyr)
df %>% group_by(group) %>% mutate(want2 = ID[ID2==0])

或者另一个选项是match

df %>% group_by(group) %>% mutate(want = ID[match(0, ID2)])
© www.soinside.com 2019 - 2024. All rights reserved.