如何计算和识别R中数据框内的等效组

问题描述 投票:1回答:2

我有一个由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,到目前为止还没有看到通过的方法。

r
2个回答
1
投票

你可以用cumsumdiff做到这一点

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部分。


0
投票

使用rle的简单基本方法:

r <- rle(d$x)
r$values[r$values == 1] <- seq_len(sum(r$values == 1))
d$id <- rep(r$values,times = r$lengths)
© www.soinside.com 2019 - 2024. All rights reserved.