Непонятно из вопроса, должны ли чередоваться «A» и «C», хотя это и подразумевается, потому что нет кодирования «B» между «A» и «A» или vv.Предположим, что они это делают, для вектора
x = c("B", "A", "B", "B", "C", "B", "A", "B", "C")
сопоставляют с числовыми значениями c(A=1, B=0, C=-1)
и формируют кумулятивную сумму
v = cumsum(c(A=1, B=0, C=-1)[x])
(увеличение на 1 при обнаружении "A", уменьшение наодин, когда "C").Заменить позиции, не соответствующие "B", на NA
v[x != "B"] = NA
, что дает
> v
B A B B C B A B C
0 NA 1 1 NA 0 NA 1 NA
Это может быть зафиксировано как функция
fun = function(x, map = c(A = 1, B = 0, C = -1)) {
x = map[x]
v = cumsum(x)
v[x != 0] = NA
v
}
и использовано дляпреобразовать data.frame или tibble, например,
tibble(x) %>% mutate(v = fun(x))