【问题标题】:R: cumulative total at a daily levelR:每日累计总数
【发布时间】:2018-11-14 01:15:53
【问题描述】:

我有以下数据集:

我想每天测量累计总数。所以结果看起来像:

我可以使用 dplyr 的 cumsum 函数,但“缺失天数”的计数不会显示。例如,原始数据框中不存在日期 1/3/18。我希望这个错过的日期在结果数据框中,并且它的累积总和应该与最后一个已知日期相同,即 1/2/18,总和为 5。

感谢任何帮助!我是这门语言的新手。

【问题讨论】:

  • 你有没有尝试过?此外,请不要发布数据图像:它无法复制或搜索 (SEO),它会破坏屏幕阅读器,并且可能不适合某些移动设备。参考:meta.stackoverflow.com/a/285557/3358272
  • 只需从数据集中的第一天到最后一天创建一个日期向量,然后将其加入原始数据。那么你应该准备好了。

标签: r dplyr time-series


【解决方案1】:

我将使用第二个data.frame 来填写缺失的日期:

daterange <- data.frame(Date = seq(min(x$Date), max(x$Date), by = "1 day"))

基础R:

transform(merge(x, daterange, all = TRUE),
          Count = cumsum(ifelse(is.na(Count), 0, Count)))
#          Date Count
# 1  2018-01-01     2
# 2  2018-01-02     5
# 3  2018-01-03     5
# 4  2018-01-04     5
# 5  2018-01-05    10
# 6  2018-01-06    10
# 7  2018-01-07    10
# 8  2018-01-08    11
# ...
# 32 2018-02-01    17

dplyr

library(dplyr)
x %>%
  right_join(daterange) %>%
  mutate(Count = cumsum(if_else(is.na(Count), 0, Count)))

数据:

x <- data.frame(Date = as.Date(c("1/1/18", "1/2/18", "1/5/18", "1/8/18", "2/1/18"), format="%m/%d/%y"),
                Count = c(2,3,5,1,6))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-06-07
    • 1970-01-01
    • 1970-01-01
    • 2021-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多