我有一个由0和1组成的简单数据帧
library(dplyr)
d <- data.frame(x=c(0,0,1,1,0,1,1,1,0,0,1))
我希望每个1的组都由唯一的id标识:
x id
1 0 0
2 0 0
3 1 1
4 1 1
5 0 0
6 1 2
7 1 2
8 1 2
9 0 0
10 0 0
11 1 3
它可以使用一个简单的循环来解决,我想避免。我尝试过group_indices(dplyr),na.locf(动物园)和cumsum,到目前为止还没有看到通过的方法。
你可以用cumsum
和diff
做到这一点
G1 = cumsum(c(d$x[1] == 1, diff(d$x) == 1))
d$id = ifelse(d$x==1, G1, 0)
d
x id
1 0 0
2 0 0
3 1 1
4 1 1
5 0 0
6 1 2
7 1 2
8 1 2
9 0 0
10 0 0
11 1 3
如果x的第一个元素是1,你需要d$x[1] == 1
部分。
使用rle
的简单基本方法:
r <- rle(d$x)
r$values[r$values == 1] <- seq_len(sum(r$values == 1))
d$id <- rep(r$values,times = r$lengths)