我如何创建一个新变量“CountWK”,该变量基于“WK”中出现的值计数,直到“性能”中按“ID”分组的第一个“1”实例?
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)
因此,对于 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
然后分配
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
关于R根据值的计数创建一个新的向量,直到现有向量的第一个值实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29591074/