Замените значение количеством раз, когда группа чисел появлялась в векторе до этой точки. - PullRequest
3 голосов
/ 29 мая 2020

У меня есть такой вектор, состоящий из единиц и нулей рядом друг с другом.

vec <- c(1,1,1,0,0,1,1,1,1,0,0,0,1,1,1)

Я хочу заменить единицы на число, которое появляются последовательные единицы, чтобы окончательный вектор выглядел как тот ниже.

vec1 <- c(1,1,1,0,0,2,2,2,2,0,0,0,3,3,3)

Я даже не знаю, как начать решать эту проблему. Любая помощь приветствуется.

Ответы [ 3 ]

4 голосов
/ 29 мая 2020

В одну сторону, используя rle:

with(rle(vec), rep(values * cumsum(values), lengths))
#[1] 1 1 1 0 0 2 2 2 2 0 0 0 3 3 3
2 голосов
/ 29 мая 2020

Один base R вариант может быть:

cumsum(vec & c(0, head(vec, -1)) == 0) * vec

[1] 1 1 1 0 0 2 2 2 2 0 0 0 3 3 3
0 голосов
/ 29 мая 2020

Мы можем использовать rleid из data.table

library(data.table)
vec[as.logical(vec)] <- as.integer(factor(rleid(vec)[as.logical(vec)]))
vec
#[1] 1 1 1 0 0 2 2 2 2 0 0 0 3 3 3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...