如何计算特定值的数量

时间:2015-01-10 08:53:45

标签: r

我的数据如下:

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代码来实现这个目标会很棒。感谢。

3 个答案:

答案 0 :(得分:5)

以下是data.table

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

答案 1 :(得分:3)

以及dplyr

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

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

答案 2 :(得分:3)

您可以在基础R中使用ave

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