2015-01-10 203 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)) 
相關問題