我使用aggregate()
将表示事件的行的数据框聚合到另一个每日计数数据框中。结果框架按日期排序,但缺少计数为零的天数,我想填写这些日子以获得连续的每日系列。计数框看起来像这样:
agg <- data.frame(
date = as.Date(c("2013-04-02", "2013-04-04", "2013-04-07", "2013-04-08")),
count = c(4, 2, 6, 1))
我之前解决这个问题的方法是迭代框架以找到非连续的天数,然后用空的框架对框架的子集进行rbinding。但这是一个丑陋的解决方案,调试很糟糕,启动效率很低。我的想法是,最好生成一个新的数据框,用目标日期系列填充它......
target <- data.frame(
date = seq(from = as.Date("2013-04-01"), to = as.Date("2013-04-10"), by = "day"),
count = NA)
...然后以某种方式使用匹配日期将项目从agg
计入target
。有谁知道我会怎么做 - 或者有更好的解决方案?
答案 0 :(得分:2)
你几乎就在那里。只是做:
merge(agg,target[-2],all.y=TRUE)
需要子集[-2]来从目标中删除count列,因为它不是必需的。或者,您可以这样做:
target <- data.frame(
date = seq(from = as.Date("2013-04-01"), to = as.Date("2013-04-10"), by = "day"))
merge(agg,target,all.y=TRUE)
答案 1 :(得分:1)
作为另一种解决方案,这个怎么样?
other <- data.frame(date = seq(as.Date("2013-04-01"), as.Date("2013-04-10"), by = "day"), count = 0)
other <- filter(other, !(date %in% agg$date))
join = full_join(agg, other, by = c("date", "count")) %>% arrange(date)
它有点乱,但它可以解决问题。
编辑:修正了一两个错误