Вот мой исходный кадр данных:R: Как просуммировать на основе нескольких критериев и обобщать таблица
df <- read.table(text="
Date Index Event
2014-03-31 A x
2014-03-31 A x
2014-03-31 A y
2014-04-01 A y
2014-04-01 A x
2014-04-01 B x
2014-04-02 B x
2014-04-03 A x
2014-09-30 B x", header = T, stringsAsFactors = F)
date_range <- seq(as.Date(min(df$Date)), as.Date(max(df$Date)), 'days')
indices <- unique(df$Index)
events_table <- unique(df$Event)
Я хочу, чтобы мой желаемый результат, чтобы суммировать мои dataframe и имеет уникальную запись для каждого индекса в индексах и каждая дата в date_range, предоставляя кумулятивное значение каждого события в event_table в новом столбце для всех дат, предшествующих значению в столбце «Дата». Иногда нет записей для каждого индекса или каждой даты.
Вот мой желаемый результат:
Date Index cumsum(Event = x) cumsum(Event = y)
2014-03-31 A 0 0
2014-03-31 B 0 0
2014-04-01 A 2 1
2014-04-01 B 0 0
2014-04-02 A 3 2
2014-04-02 B 1 0
...
2014-09-29 A 4 2
2014-09-29 B 2 0
2014-09-30 A 4 2
2014-09-30 B 2 0
FYI - это упрощенная версия фрейма данных. Есть ~ 200 000 записей в год с сотнями различных полей Индекса для каждой Даты.
Я делал это в прошлом, прежде чем мой жесткий диск обжарил, используя by
и, возможно, aggregate
, но процесс был очень медленным, и я не смог его обработать на этот раз. Я также пробовал ddply
, но я не могу получить функцию cumsum
для работы с ней. Используя ddply
, я пытался что-то вроде:
ddply(xo1, .(Date,Index), summarise,
sum.x = sum(Event == 'x'),
sum.y = sum(Event == 'y'))
безрезультатно.
Через поиск, я нашел Replicating an Excel SUMIFS formula , который доставит мне кумулятивную часть моего проекта, но с этим я не смог понять, как суммировать его до одной записи на дату/индексную комбинацию. Я также наткнулся на sum/aggregate data based on dates, R, но здесь я не смог обработать динамическую дату.
Спасибо всем, кто может помочь!
Я смущен вашим ожидаемым выходом. В одной строке вашего ожидаемого результата вы ожидаете, что 'cumsum (Event = x)' будет '0'? Даже если ваш исходный 'df' имеет 2 строки с' Date = 2014-03-31', 'Index = A' и' Event = x'? – davechilders
Добавление подчеркивания «Я хочу, чтобы мой желаемый результат суммировал мой фрейм данных и имел уникальную запись для каждого индекса в индексах и каждую дату в date_range, одновременно предоставляя кумулятивное значение каждого события в event_table в новом столбце ** для всех дат до Столбец даты ** « ... Для фона я пытаюсь создать модель, используя информацию, которая была бы доступна мне в то утро. Итак, утром 2014-03-31 у меня нет данных.В течение дня собираются данные, а в 2014-04-01 данные от 2014-03-31 - это то, что я буду иметь, чтобы прогнозировать события на 2014-04-01 – exhoosier10
Спасибо за разъяснение. Я пропустил это при первом чтении. – davechilders