Мы можем replace
NA
значения и подсчитывать, используя cumsum
:
library(dplyr)
data %>%
group_by(ID) %>%
mutate(Trues = cumsum(replace(TrueFalse, is.na(TrueFalse), 0)),
Falses = cumsum(!replace(TrueFalse, is.na(TrueFalse), TRUE)))
# ID TrueFalse Trues Falses
# <int> <lgl> <dbl> <int>
# 1 1 NA 0 0
# 2 1 TRUE 1 0
# 3 1 TRUE 2 0
# 4 1 NA 2 0
# 5 1 FALSE 2 1
# 6 1 FALSE 2 2
# 7 2 TRUE 1 0
# 8 2 FALSE 1 1
# 9 2 NA 1 1
#10 2 NA 1 1
#11 2 FALSE 1 2
#12 2 TRUE 2 2
#13 2 FALSE 2 3
Если у нас есть символьные значения в TrueFalse
, мы можем использовать:
data %>%
group_by(ID) %>%
mutate(Trues = cumsum(replace(TrueFalse, is.na(TrueFalse), '') == 'TRUE'),
Falses = cumsum(replace(TrueFalse, is.na(TrueFalse), '') == 'FALSE'))