我如何创建一个新的变量"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".
这是我如何使用data.table包来解决这个问题
首先使用.I和查找行索引match
library(data.table)
indx <- setDT(Data)[, .I[match(1L, Performance)], by = ID]$V1
Run Code Online (Sandbox Code Playgroud)
然后分配WK到CountWk由该索引
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)