【问题标题】:How can I dynamically generate a dataframe as I collect more values in R?当我在 R 中收集更多值时,如何动态生成数据框?
【发布时间】:2018-09-30 02:03:57
【问题描述】:

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

截至目前,我只有上个月的数据,当前数据如下:

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

展望未来,将收集更多数据并产生价值 对于每一天的“计数”列。

我可以使用以下方法将上述 df 转换为monthly.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")

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

不确定我是否需要编写一些函数来计算每个月的值,然后在最终数据帧中执行 rbind。如果有人可以帮助我,将不胜感激!

【问题讨论】:

    标签: r ggplot2 shiny


    【解决方案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))
    

    【讨论】:

    • 像魅力一样工作!非常感谢乔恩!
    猜你喜欢
    • 2015-06-01
    • 2011-12-22
    • 1970-01-01
    • 1970-01-01
    • 2013-11-19
    • 1970-01-01
    • 2010-10-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多