R基于值的计数创建新向量,直到值为现有向量的第一个实例

use*_*490 4 r count

我如何创建一个新的变量"CountWK",它基于"WK"中的值的计数,直到"性能"中的第一个"1"实例按"ID"分组?

ID<-c('A', 'A', 'A', 'B', 'B', 'B', 'C', 'C', 'C', 'C', 'C')
WK<-c(1, 2, 3, 1, 2, 3, 1, 2, 3, 4, 5)
Performance<-c(0,1,1,0,1,0,0,1,0,1,1)
Data<-data.frame(ID, WK, Performance)
Run Code Online (Sandbox Code Playgroud)

因此,对于ID"A",CountWk将为"2",对于"B""2",对于C"2",除了包含第一个实例的行之外的每个其他行,"CountWk"中的值为N/A. "表演"中的"1".

Dav*_*urg 6

这是我如何使用data.table包来解决这个问题

首先使用.I和查找行索引match

library(data.table)
indx <- setDT(Data)[, .I[match(1L, Performance)], by = ID]$V1
Run Code Online (Sandbox Code Playgroud)

然后分配WKCountWk由该索引

Data[indx, CountWk := WK][]
#     ID WK Performance CountWk
#  1:  A  1           0      NA
#  2:  A  2           1       2
#  3:  A  3           1      NA
#  4:  B  1           0      NA
#  5:  B  2           1       2
#  6:  B  3           0      NA
#  7:  C  1           0      NA
#  8:  C  2           1       2
#  9:  C  3           0      NA
# 10:  C  4           1      NA
# 11:  C  5           1      NA
Run Code Online (Sandbox Code Playgroud)