在R中收集更多值时,如何动态生成数据框?

时间:2018-09-30 02:03:58

标签: r ggplot2 shiny

我想动态生成一个数据框,以便在收集更多数据时自动更新行值,以便可以在ggplot中绘制条形图。

截至目前,我只有直到上个月的数据,而当前数据如下所示:

Date            Count
2018-09-01         12
2018-09-02         23
2018-09-03          5
2018-09-04          8
.                   .
.                   .
.                   .
2018-09-30         10

继续前进,将收集更多的数据,并且会有一个价值 每天的“计数”列。

我可以使用以下方法将上述df转换为month.df:

library(dplyr)
df %>% group_by(month=floor_date(Date, "month")) %>% summarize(Count=sum(Count))

month      Users
2018-09-01   165

如果我使用这个新的df绘制ggplot图表,它将仅给我一个柱线,因为当前其他月份没有数据。但是,我仍然想在没有值的月份中绘制一个0的月度图表。我的目标是生成一个看起来像这样的数据框:

Year Month Count
2018   Jan     0
2018   Feb     0
2018   Mar     0
2018   Apr     0
2018   May     0
2018   Jun     0
2018   Jul     0
2018   Aug     0
2018   Sep    55
2018   Oct     0
2018   Nov     0
2018   Dec     0

这样我就可以绘制一个像这样的图表:

library(ggplot)
ggplot(monthly.users, aes(x= Month, y= Count, fill= Month)) + geom_bar(stat= "identity")

Month on Month Chart

并且在收集数据时将自动生成图表的值(即每个月)。

不确定我是否需要编写一些函数来计算每个月的值,然后对最终数据框进行rbind。非常感谢有人可以帮助我!

1 个答案:

答案 0 :(得分:1)

Padr::pad是用于此类事情的有用函数。

monthly.users <- df %>% 
  group_by(month = lubridate::floor_date(Date, "1 month")) %>%  
  summarize(Count=sum(Count)) %>%
  padr::pad(start_val = lubridate::ymd(20180101), 
            interval = "1 month") %>%
  mutate(Count = tidyr::replace_na(Count, 0))