如何创建平均一天的分布可视化?

时间:2018-11-18 19:08:34

标签: r dataframe data-visualization

在R中,我的数据框(“ sampledata”)如下所示:

data in R

  • 时间戳列为POSIXct,格式:“ 2018-10-01 00:03:23”
  • 状态列是具有三个级别“可用”,“ MUST_NOT_RUN”,“ MUST_RUN”的因子
  • 有6个唯一的device_id。每个设备的时间戳都不相同,这意味着并非总是在同一分钟为每个设备收集数据。在某些情况下,同一设备每分钟有多个记录。

我想将数据转换为可视化的图像,以显示“典型”日中“状态”的分布。理想情况是这样的:

Desired Visualization

我已尝试按时间戳记分钟对每次出现的“状态”进行计数,但均失败了(错误:无法求和)。我一直在尝试使用ggplot和geom_area进行可视化,但是相信我需要重新构造数据,然后才能起作用。对R非常新(很明显)。很高兴阅读作为背景提供的任何教程或链接,并感谢您可以提供的任何帮助。谢谢!

其他可能/可能没有帮助的信息

  • 数据框中有几列未显示。
  • 在10/2/18-11/8/18之间
  • 223,446个条目。

1 个答案:

答案 0 :(得分:3)

您可以从时间戳中获取小时数,然后按小时计算状态比例:

library(ggplot2)
library(plyr)

#get hours from timestamp
obj$hour <- as.POSIXlt(obj$timestamp)$hour 

#get average state proportions per hour
plot_obj <- ddply(obj,.(hour), #take data.frame "obj" and group by "hour"
      function(x) with(x,                      
                         data.frame(100*table(state)/length(state))))



ggplot(plot_obj, aes(x=hour,y=Freq,fill=state)) +
  geom_area()