【发布时间】:2015-03-27 15:34:35
【问题描述】:
这是我的原始数据框:
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)
我希望我想要的输出总结我的数据框,并为 indices 中的每个索引和 date_range 中的每个日期提供唯一记录,同时提供每个事件的累积值events_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
仅供参考 - 这是数据框的简化版本。每年有大约 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有两行Date = 2014-03-31、Index = A和Event = x? -
强调“我希望我想要的输出总结我的数据框,并为索引中的每个索引和 date_range 中的每个日期提供唯一记录,同时在新列中提供 events_table 中每个事件的累积值 对于日期列之前的所有日期“......作为背景,我正在尝试使用那天早上我可以获得的信息来构建一个模型。所以在 2014-03-31 早上,我没有可用的数据。一整天都在收集数据,在 2014 年 4 月 1 日,2014 年 3 月 31 日的数据是我可以用来预测 2014 年 4 月 1 日事件的数据
-
感谢您的澄清。我在初次阅读时错过了这一点。