2012-07-26 95 views
2

假設我爲R數據框,看起來像這樣,在end.group標誌着一個獨特的羣體意見的結尾:在R中,我如何計算運行次數?

x <- data.frame(end.group=c(0,0,1,0,0,1,1,0,0,0,1,1,1,0,1)) 

我想回到以下,其中group.count是觀測的數量的運行計數在一個組中,並且group是每個組的唯一標識符,按編號順序。任何人都可以幫我用一段R代碼來做到這一點?

end.group group.count group 
0   1   1 
0   2   1 
1   3   1 
0   1   2 
0   2   2 
1   3   2 
1   1   3 
0   1   4 
0   2   4 
0   3   4 
1   4   4 
1   1   5 
1   1   6 
0   1   7 
1   2   7 

回答

4

您可以通過使用cumsumrev創建group。您需要rev,因爲您擁有組的終點。現在

x <- data.frame(end.group=c(0,0,1,0,0,1,1,0,0,0,1,1,1,0,1)) 
# create groups 
x$group <- rev(cumsum(rev(x$end.group))) 
# re-number groups from smallest to largest 
x$group <- abs(x$group-max(x$group)-1) 

可以使用ave創建group.count

x$group.count <- ave(x$end.group, x$group, FUN=seq_along) 
+0

謝謝約書亞 - 好東西! – Luke 2012-07-26 16:54:56

3
x <- data.frame(end.group=c(0,0,1,0,0,1,1,0,0,0,1,1,1,0,1)) 

ends <- which(as.logical(x$end.group)) 
ends2 <- c(ends[1],diff(ends)) 
transform(x, group.count=unlist(sapply(ends2,seq)), group=rep(seq(length(ends)),times=ends2)) 
    end.group group.count group 
1   0   1  1 
2   0   2  1 
3   1   3  1 
4   0   1  2 
5   0   2  2 
6   1   3  2 
7   1   1  3 
8   0   1  4 
9   0   2  4 
10   0   3  4 
11   1   4  4 
12   1   1  5 
13   1   1  6 
14   0   1  7 
15   1   2  7 
+0

乾杯詹姆斯 - 像魅力一樣工作。 – Luke 2012-07-26 16:55:28