统计单列中连续出现的值及其所属组的次数

5

我正在尝试创建一系列相同值的序号,即出现次数的计数。但是,即使行保持连续,我希望计数在引入新的ID时重置。

以下是我的数据示例:

dataset <- data.frame(ID = 
c("a","a","a","a","a","a","a","b","b","b","b","b","b","b")
dataset$YesNO <- c(1,1,0,0,0,1,1,1,1,1,0,0,0,0)

我希望创建一个新的列,其中包含这些结果:

c(1,2,1,2,3,1,2,1,2,3,1,2,3,4)

我使用了在这个论坛上找到的代码:

dataset$Counter <- sequence(rle(as.character(dataset$YesNo))$lengths)

然而,这并没有重置新ID号的计数。相反,连续计数将继续,并产生以下输出结果:
c(1,2,1,2,3,1,2,3,4,5,1,2,3,4)

我漏掉了哪一步可以根据ID重置它呢?
谢谢!
3个回答

6

还有一个 dplyr 的可能性:

dataset %>%
 group_by(ID, grp = with(rle(YesNO), rep(seq_along(lengths), lengths))) %>%
 mutate(Counter = seq_along(grp)) %>%
 ungroup() %>%
 select(-grp)

   ID    YesNO Counter
   <fct> <dbl>   <int>
 1 a        1.       1
 2 a        1.       2
 3 a        0.       1
 4 a        0.       2
 5 a        0.       3
 6 a        1.       1
 7 a        1.       2
 8 b        1.       1
 9 b        1.       2
10 b        1.       3
11 b        0.       1
12 b        0.       2
13 b        0.       3
14 b        0.       4

或者:

dataset %>%
 group_by(ID, grp = with(rle(YesNO), rep(seq_along(lengths), lengths))) %>%
 mutate(Counter = 1:n()) %>%
 ungroup() %>%
 select(-grp)

4
使用 data.table 包中的 rleid 函数来获取分组变量,然后使用 ave 函数在该分组的相同值内应用 seq_along 函数:
library(data.table)
transform(dataset, Counter = ave(YesNO, rleid(ID, YesNO), FUN = seq_along))

提供:

   ID YesNO Counter
1   a     1       1
2   a     1       2
3   a     0       1
4   a     0       2
5   a     0       3
6   a     1       1
7   a     1       2
8   b     1       1
9   b     1       2
10  b     1       3
11  b     0       1
12  b     0       2
13  b     0       3
14  b     0       4

0

你可以这样做:

dataset$Counter <- with(dataset,
                        ave(YesNO, ID, FUN = function(x) sequence(rle(as.character(x))$lengths)))

输出:

   ID YesNO Counter
1   a     1       1
2   a     1       2
3   a     0       1
4   a     0       2
5   a     0       3
6   a     1       1
7   a     1       2
8   b     1       1
9   b     1       2
10  b     1       3
11  b     0       1
12  b     0       2
13  b     0       3
14  b     0       4

嘿@arg0naut91,太棒了,你能帮忙回答这个问题吗?https://stackoverflow.com/questions/68330838/conting-events-between-sequential-stages-in-a-process-using-r - R_Student

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接