【问题标题】:How to aggregate weekly with uncomplete first and last week?如何汇总每周不完整的第一周和最后一周?
【发布时间】:2018-06-02 20:36:44
【问题描述】:

我想按周计算一个值。有时第一周或最后一周的时间少于 7 天。在下面的示例中,数据从 2016-01-01 开始,但该周的下限日期是 2015-12-27。所以每周的总和是基于两天而不是七天。我知道这种行为是完全合乎逻辑的,但我希望第一周和上周(可能包含少于 7 天的数据)不会在图中显示为低值。 我怎样才能做到这一点?我应该省略第一周和最后一周吗?我应该在这里使用平均值吗?怎么样?

expenses <- data_frame(
  date=seq(as.Date("2016-01-01"), as.Date("2016-12-31"), by=1),
  amount=rgamma(length(date), shape = 2, scale = 20))

plot_df <-  expenses %>% 
  mutate(Week = floor_date(date, "week")) %>%  
  group_by(Week) %>% 
  summarize(exp_sum = sum(amount))

ggplot(data = plot_df, 
       aes(x = as.Date(Week), y = exp_sum)) + 
  geom_line() +
  geom_point() + 
  scale_x_date(date_breaks = "1 week", date_labels = "%W")

Plot Example

【问题讨论】:

  • 你可以得到周数如stackoverflow.com/questions/22439540/…然后聚合
  • 会得到周数增加问题吗?我的意思是,由于 data.frame 中有不同的年份,这会产生"53" "01" "02" "03"..."48" "49" "50"

标签: r datetime aggregate lubridate summarize


【解决方案1】:

由于期间不包括相同的天数,我的第一个建议是删除它们,为此您应该只选择您的数据库减去第一行和最后一行。这个真的很简单,一行就搞定了。

plot_df <- plot_df[-c(1,nrow(plot_df)),]

第二种方法是添加所有值的平均值。但是,这应该反映在结果中。

plot_df[c(1,nrow(plot_df)),"exp_sum"] <- mean(plot_df$exp_sum)

我最后一次尝试是分配它之后或之前的值:

plot_df[1,"exp_sum"] <- plot_df[2, "exp_sum"]
plot_df[nrow(plot_df), "exp_sum"] <- plot_df[nrow(plot_df)-1, "exp_sum"]

正如我告诉你的,我会抹去它们。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-11-21
    • 2018-01-13
    • 1970-01-01
    • 2021-07-21
    • 1970-01-01
    • 2011-11-17
    • 2021-08-04
    • 2016-02-08
    相关资源
    最近更新 更多