我有一个变量为v1
的数据框。我希望变量v2
是行的零运行计数(即在该行之前和之前只计数零)。 Conversley,我希望v3
成为非零数字的运行计数。数据框dat
说明了所需的输出。
dat <- structure(list(v1 = c(0L, 0L, 1L, 0L, 0L, 0L, 1L, 1L, 1L, 10L,
2L, 0L), v2 = c(1L, 2L, 2L, 3L, 4L, 5L, 5L, 5L, 5L, 5L, 5L, 6L
), v3 = c(0L, 0L, 1L, 1L, 1L, 1L, 2L, 3L, 4L, 5L, 6L, 6L)), .Names = c("v1",
"v2", "v3"), class = "data.frame", row.names = c(NA, -12L))
> dat
v1 v2 v3
1 0 1 0
2 0 2 0
3 1 2 1
4 0 3 1
5 0 4 1
6 0 5 1
7 1 5 2
8 1 5 3
9 1 5 4
10 10 5 5
11 2 5 6
12 0 6 6
答案 0 :(得分:2)
within(dat, {
v33 <- cumsum(v1 != 0)
v22 <- cumsum(v1 == 0)
})
# v1 v2 v3 v22 v33
# 1 0 1 0 1 0
# 2 0 2 0 2 0
# 3 1 2 1 2 1
# 4 0 3 1 3 1
# 5 0 4 1 4 1
# 6 0 5 1 5 1
# 7 1 5 2 5 2
# 8 1 5 3 5 3
# 9 1 5 4 5 4
# 10 10 5 5 5 5
# 11 2 5 6 5 6
# 12 0 6 6 6 6
答案 1 :(得分:2)
您想在此处使用cumsum
作为给定条件的累积总和。
> v1 <- c(0, 0, 1, 0, 0, 0, 1, 1, 1, 10, 2, 0)
> v2 <- cumsum(v1 == 0)
> v3 <- cumsum(v1 > 0)
> data.frame(v1, v2, v3)
## v1 v2 v3
## 1 0 1 0
## 2 0 2 0
## 3 1 2 1
## 4 0 3 1
## 5 0 4 1
## 6 0 5 1
## 7 1 5 2
## 8 1 5 3
## 9 1 5 4
## 10 10 5 5
## 11 2 5 6
## 12 0 6 6