在R中,我如何计算运行的运行次数?

时间:2012-07-26 14:37:29

标签: r count

假设我的R数据框看起来像这样,其中end.group表示一组唯一的观察结束:

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

2 个答案:

答案 0 :(得分:4)

您可以使用groupcumsum创建rev。您需要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)

答案 1 :(得分: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