首页 > 解决方案 > 基于列中的 ID 和值的计数器

问题描述

我有一个包含 ID 和类型列的数据框。我想要一个计数器,如果类型为“T”,那么下一行中的计数器将为每个 ID 的计数器 + 1。基本上,计数器是本示例中的 Output_column。

ID <- c(1,1,1,1,1,1,3,3,4,4,4,4)

Type <- c("A","A","T","A","A","A","A","A","T","A","T","A")

Output_Column <- c(1,1,1,2,2,2,1,1,1,2,2,3)

   ID Type Output_Column
1   1    A             1
2   1    A             1
3   1    T             1
4   1    A             2
5   1    A             2
6   1    A             2
7   3    A             1
8   3    A             1
9   4    T             1
10  4    A             2
11  4    T             2
12  4    A             3

d <- data.frame(ID,Type, Output_Column)

标签: rdplyr

解决方案


baseR 解决方案

output_col <- as.numeric(ave(Type, ID, FUN = function(x) cumsum(c('T', x[-length(x)]) == 'T')))

output_col
 [1] 1 1 1 2 2 2 1 1 1 2 2 3

推荐阅读