Объединить аналогичные последовательные наблюдения в одно наблюдение в R

У меня есть такой набор данных

date ID key value
05   1   3   2
05   1   3   5
05   1   3   1
05   1   5   2
05   1   7   3
05   1   7   3
05   1   3   4
05   2   9   8

Мне нужен вывод, чтобы выглядеть так

date ID key value
05   1   3   8
05   1   5   2
05   1   7   6
05   1   3   4
05   2   9   8

поэтому, как вы видите, если последовательная дата, идентификатор и ключ совпадают, я хочу знать, как объединить эти наблюдения и добавить их значение. Мне нужно, чтобы это происходило только в том случае, если события были последовательными. Возможно ли это сделать? если да, может кто-нибудь сказать, пожалуйста, как это сделать? Спасибо

1 ответ

Решение

Использование rle искать последовательные последовательности

# your data
df <- read.table(text="date ID key value
 05   1   3   2
 05   1   3   5
 05   1   3   1
 05   1   5   2
 05   1   7   3
 05   1   7   3
 05   1   3   4
 05   2   9   8", header=T)

# get consecutive values - add a grouping variables
r <- with(df, rle(paste(date, ID, key)))
df$grps <- rep(seq(r$lengths), r$lengths)

# aggregate values
a <- aggregate(value ~ date + ID + key + grps, data = df , sum)

# remove the grouping variable
a$grps <- NULL
Другие вопросы по тегам