Кластеризация строк по идентификатору на основе условия значения столбца несколько раз - PullRequest
0 голосов
/ 23 октября 2018

Некоторое время назад я открыл связанный вопрос в этом сообщении

Предположим, у меня есть следующий df:

data <- data.frame(ID = c(1,1,1,1,1,1,1,1,1,1,1, 1, 1,1,1,1,1,1,1,1,1,1),
               Obs1 = c(1,1,0,1,0,1,1,0,1,0,0,0,1,1,1,1,1,1,1,1,0,1),
               Control = c(0,3,3,1,12,1,1,1,36,13,1,1,2,24,2,2,48,24,20,21,10,10),
               ClusterObs1 = c(1,1,1,2,2,3,3,3,4,4,4,4,5,5,5,5,5,5,5,5,5,6))

И я хочу получить:

data <- data.frame(ID = c(1,1,1,1,1,1,1,1,1,1,1, 1, 1,1,1,1,1,1,1,1,1,1),
               Obs1 = c(1,1,0,1,0,1,1,0,1,0,0,0,1,1,1,1,1,1,1,1,0,1),
               Control = c(0,3,3,1,12,1,1,1,36,13,1,1,2,24,2,2,48,24,20,21,10,10),
               ClusterObs1 = c(1,1,1,2,2,3,3,3,4,4,4,4,5,5,5,5,5,5,5,5,5,6),
               DesiredResultClusterObs1 = c(1,1,1,2,2,3,3,3,4,4,4,4,5,6,6,6,7,8,9,10,10,11))

Условия: Если значение «Control» больше 12 и фактическое значение «Obs1» равно 1, а предыдущему значению «Obs1», значение «DesiredResultClusterObs1» должно добавить +1 (основноеразница с другим вопросом заключается в том, что необходимо учитывать последовательные контрольные значения выше 12)

Любая идея о том, как мне достичь желаемого результата.

1 Ответ

0 голосов
/ 23 октября 2018

Я не знаю много, как использовать функции whith () и rle (), но я нашел решение проблемы, используя ifelse.

data <- data %>% mutate (aux = ifelse (Control>12 & Obs1 == 1 & lag(Obs1) ==1,1,0),
                         DesiredResultClusterObs1 = ClusterObs1 + cumsum(aux))

Переменная auxне обязательно, это просто поможет увидеть шаг за шагом.Вы также можете сделать следующее

data <- data %>% mutate (DesiredResultClusterObs1 =
                         ClusterObs1 + 
                         cumsum(ifelse (Control>12 & Obs1 == 1 & lag(Obs1) ==1,1,0)))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...