2014-10-27 9 views
2

目前我不得不在一個隊列研究的數據收集階段處理軟件生成的paradata(長格式)。如何針對感興趣的變量中的特定值按組創建計數變量?

如何通過組變量創建一個包含特定值發生次數的變量(如Stata中的by id: gen _n if VAR1==2)?

基本上數據看起來像這樣:

ID: VAR1:  
1  2  
1  1  
1  2  
2  2  
2  3  
2  2  
3  2  
3  2  
3  2  

如何可以通過ID創建變量count.2計數的數量,可以創建使用

`data$count.1 <- ave(data$VAR1, data$ID, FUN = seq_along)` 

ID: VAR1: count.1: 
1  2  1   
1  1  2   
1  2  3   
2  2  1    
2  3  2   
2  2  3    
3  2  1    
3  2  2    
3  2  3    

可變count.1在VAR1中發生事件2?

ID: VAR1: count.1: count.2: 
1  2  1   1 
1  1  2   NA 
1  2  3   2 
2  2  1   1 
2  3  2   NA 
2  2  3   2 
3  1  1   NA 
3  2  2   1 
3  2  3   2 

數據:提前

ID=c(1,1,1,2,2,2,3,3,3) 
VAR1=c(2,1,2,2,3,2,1,2,2) 
data <- as.data.frame(cbind(ID, VAR1)) 

謝謝!

+0

您可以創建''通過數據 akrun 2014-10-27 16:03:57

回答

2

嘗試

data$count.2 <- with(data, ave(VAR1==2, ID, 
       FUN=function(x) ifelse(x, cumsum(x), NA))) 

data$count.2 
#[1] 1 NA 2 1 NA 2 NA 1 2 

或者使用data.table

library(data.table) 
setDT(data)[VAR1==2, count.2:=1:.N, by=ID][] 
# ID VAR1 count.2 
#1: 1 2  1 
#2: 1 1  NA 
#3: 1 2  2 
#4: 2 2  1 
#5: 2 3  NA 
#6: 2 2  2 
#7: 3 1  NA 
#8: 3 2  1 
#9: 3 2  2 

或者使用dplyr

library(dplyr) 
data %>% 
     group_by(ID) %>% 
     mutate(count.2= ifelse(VAR1==2, cumsum(VAR1==2), NA)) 
+0

親愛的akrun,感謝您的回覆,這真的很有幫助!關注,Malte – maller 2014-10-28 07:52:30

+0

@ user2653152沒問題,很高興幫助。 – akrun 2014-10-28 07:53:14