【发布时间】:2021-07-05 11:56:05
【问题描述】:
我想每月总结一组更大的数据。 floor_date 提供了正确的功能来总结每月各个日期的数据。但不幸的是,我需要确保所有月份都包含在决赛桌中。因此初始数据并不总是涵盖所有月份,但在 floor_date 之后相应月份必须为 0;行/月不能简单地丢失。如何自动确保这一点?
以下示例代码阐明了我的问题:
df <- data.frame(
time = c(as.Date("01-01-2020", format = "%d-%m-%Y"), as.Date("02-01-2020", format = "%d-%m-%Y"), as.Date("01-03-2020", format = "%d-%m-%Y")),
text = c("A", "A", "B")
)
df2 <- df %>%
mutate(month = floor_date(time, unit = "month")) %>%
select(text, month) %>%
group_by(month, text) %>%
summarise(n = n())
df2
# A tibble: 2 x 3
# Groups: month [2]
month text n
<date> <fct> <int>
1 2020-01-01 A 2
2 2020-03-01 B 1
应该认识到B在2020-01月没有数据,A&B在2020-02月没有数据,A在2020-03月没有数据:这行应该加上值0。
很遗憾,到目前为止,我还没有找到以自动化方式解决问题的解决方案。
提前致谢!
【问题讨论】:
-
嗨@AnilGoyal 对不起,我的问题拖了这么久。在代码中,只有文本的命名不同(A > AB 等)。但是我已经在您的代码中考虑了这一点,但仍然没有得到您显示的结果。在我的情况下,有额外的列 .groups 以“drop”作为内容,没有额外的行显示 0。非常感谢你再次帮助我!
-
以上代码现在绝对正确且连贯。尽管如此,问题仍然存在,为什么我不能以相同的方式完全执行你的代码(因为它站在那里,不适应任何东西)/得到不同的结果
-
顺便问一下@Alex,你检查过你的 tidyr/tidyverse 版本更新了吗??
-
好吧好吧,我必须更新我的整个 R 版本,然后再次更新所有包:您的解决方案完美运行。我的错。非常感谢您的解决方案!
标签: r tidyverse lubridate floor