如何计算特定值的数量

How to count number of particular values

我的数据是这样的:

ID CO MV  
1   0  1      
1   5  0   
1   0  1      
1   9  0      
1   8  0      
1   0  1      
2  69  0       
2   0  1      
2   8  0      
2   0  1      
2  78  0      
2  53  0       
2   0  1      
2   3  0      
3  54  0      
3   0  1      
3   8  0      
3  90  0      
3   0  1      
3  56  0      
4   0  1      
4  56  0      
4   0  1      
4  45  0      
4   0  1      
4  34  0      
4  31  0      
4   0  1      
4  45  0      
5   0  1      
5   0  1      
5  67  0  

我希望它看起来像这样:

ID CO MV  CONUM
1   0  1      3 
1   5  0      3
1   0  1      3
1   9  0      3
1   8  0      3
1   0  1      3
2  69  0      5 
2   0  1      5
2   8  0      5
2   0  1      5
2  78  0      5
2  53  0      5 
2   0  1      5
2   3  0      5
3  54  0      4
3   0  1      4
3   8  0      4
3  90  0      4
3   0  1      4
3  56  0      4
4   0  1      5
4  56  0      5
4   0  1      5
4  45  0      5
4   0  1      5
4  34  0      5
4  31  0      5
4   0  1      5
4  45  0      5
5   0  1      1
5   0  1      1
5  67  0      1

我想创建一个 CONUM 列,它是 ID 列中每个值的 CO 列中非零值的总数。因此,例如,ID 1 的 CO 列有 3 个非零值,因此 CONUM 列中的相应值为 3。如果 CO 列有值,则 MV 列为 0,如果 CO 列为 0,则 MV 列为 1。所以另一种方法可以完成创建 CONUM 列将计算每个 ID 的零数。如果您能帮助我使用 r 代码来完成此操作,那就太好了。谢谢

这里有一个选项data.table

library(data.table)
setDT(df)[,CONUM:=sum(CO!=0) ,ID][]

dplyr

选项
# install.packages("dplyr")
library(dplyr)

dat <- dat %>% 
  group_by(ID) %>% 
  mutate(CONUM = sum(CO != 0))

您可以在基数 R:

中使用 ave
dat <- transform(dat, CONUM = ave(as.logical(CO), ID, FUN = sum))