2015-01-10 114 views
2

我的数据是这样的:如何计算特定值的数量

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代码来完成这件事,那将是非常好的。谢谢。

+0

本网站不应该做的你的工作。做这项工作,如果你陷入困境,我们会提供帮助。 – Dani

+1

提示:看看'?ave' –

+0

你是怎么保存你的数据的? – Drupalist

回答

3

一个选项,您可以在基础R使用ave

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

这里是data.table

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

一个选项,并用dplyr

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

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