идентификатор строки путем сброса группы после нулевых / нулевых значений - PullRequest
0 голосов
/ 08 февраля 2019

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

a <-  data.frame(
  id=rep(1:2,each=8,times=1),
  valuecolumn = c(5,5,10,0,0,0,5,0,5,5,0,5,10,0,0,0),
  targetid = c(1,1,1,1,1,1,2,2,1,1,1,2,2,2,2,2)
)

Этот ответ был, вероятно, самым близким, который я мог найти (не работает, так как идентификатор сбрасывает все не-нулевое значение.

1 Ответ

0 голосов
/ 11 февраля 2019

Думаю, я бы отправил ответ на мой довольно специфический вопрос:

library(dplyr)
a2 <- a %>%
  group_by(id) %>%
  mutate(next.valuecolumn = lag(valuecolumn),
         next.valuecolumn2 = coalesce(next.valuecolumn, valuecolumn),
         diff = ifelse(valuecolumn > 0 & next.valuecolumn2 == 0, 1, 0),
         target2 = cumsum(diff)+1)

Идентификатор строки не «сбрасывается», но это не требуется для проблемы, так как я могу группировать по user_id-targetсуммировать значение по id.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...