填充系列中缺少日期的数据框

时间:2015-02-24 06:26:31

标签: r dataframe

我使用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。有谁知道我会怎么做 - 或者有更好的解决方案?

2 个答案:

答案 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)

它有点乱,但它可以解决问题。

编辑:修正了一两个错误