「ID」でグループ化された「パフォーマンス」の「1」の最初のインスタンスまでに発生する「WK」の値のカウントに基づく新しい変数「CountWK」を作成するにはどうすればよいですか?
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の場合は "CountWk"の値がN / Aの場合、最初のインスタンスを含む行以外のすべての行「パフォーマンス」の「1」の。
回答:
回答№1の場合は3使用するオプション dplyr
library(dplyr)
Data %>%
group_by(ID) %>%
mutate(CountWk= ifelse(cumsum(Performance==1)==1 & Performance!=0,
WK, NA_real_))
# 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
またはなしで ifelse
Data %>%
group_by(ID) %>%
mutate(CountWk= (NA^!(cumsum(Performance==1)==1 & Performance!=0)) *WK)
または base R
Data$CountWk <- with(Data, (NA^!(ave(Performance==1, ID, FUN=cumsum)==1&
Performance!=0)) * WK)
回答№2の6
これが私がこれを使用してこれにアプローチする方法です 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