Отдельные операции над группами значений временных рядов, обозначенных одним и тем же флагом в R - PullRequest
0 голосов
/ 07 ноября 2018

У кого-нибудь есть решение для выполнения

  • отдельные операции на
  • групп последовательных значений, которые
  • подмножество временного ряда и
  • идентифицируется повторяющимся идентичным флагом
  • с R?

В примере набора данных, созданного с помощью приведенного ниже кода, это будет относиться, например, к вычислению среднего значения «значение» отдельно для каждой группы, где «флаг» == 1 в последовательные дни.

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

Спасибо за ваши предложения. Jens

library(lubridate)

df <- data.frame(
    date = seq(ymd("2018-01-01"), ymd("2018-06-29"), by = "days"),
    flag = rep( c(rep(1,10), rep(0, 20)), 6),
    value = seq(1,180,1)
  )

1 Ответ

0 голосов
/ 07 ноября 2018

Функция data.table rleid отлично подходит для присвоения групповых идентификаторов сериям последовательных значений. Я продолжаю использовать data.table, но в dplyr или base.

вы можете использовать все, кроме части rleid.

Мой ответ сводится к , используйте data.table::rleid, а затем выберите свой любимый способ, чтобы взять среднее по группе (ссылка R-FAQ) .

library(data.table)
setDT(df)
df[, r_id := rleid(flag)]
df[flag == 1, list(
    min_date = min(date),
    max_date = max(date),
    mean_value = mean(value)
  ), by = r_id]

#    r_id   min_date   max_date mean_value
# 1:    1 2018-01-01 2018-01-10        5.5
# 2:    3 2018-01-31 2018-02-09       35.5
# 3:    5 2018-03-02 2018-03-11       65.5
# 4:    7 2018-04-01 2018-04-10       95.5
# 5:    9 2018-05-01 2018-05-10      125.5
# 6:   11 2018-05-31 2018-06-09      155.5
...