【问题标题】:Having trouble correctly producing time series plot无法正确生成时间序列图
【发布时间】:2020-11-25 21:26:07
【问题描述】:

我正在尝试从 R Studio 中的 excel 文件中绘制时间序列。它有一个名为“日期”的列。此列包含客户访问的日期时间数据,格式为 2/15/2014 6:17:22 AM。日期时间最初是 char 格式,我使用 lubridate 将其转换为大 POSIXct 值:

tsData <- mdy_hms(fullUsage$Dates) 

这给了我一个价值:

POSIXct[1:25,354], format: "2018-04-13 10:18:14" "2018-04-14 13:27:11" .....

然后我尝试使用以下代码将其转换为时间序列对象: 需要(xts)

visitTimes.ts <- xts(tsData, start = 1, order.by=as.POSIXct(tsData))

plot(visitTimes.ts)

ts_plot(visitTimes.ts)

ts_info(visitTimes.ts)

我不是 100% 确定,但看起来情节是使用访问总数得出的。我相信我的问题可能在于使用日期正确索引我的数据。如果这是一个简单的问题,我提前道歉我还在学习 R。我已经包含了我的情节截图。

【问题讨论】:

  • 嗨穆尼尔。你想在 y 轴上绘制什么?是每周、每天、每小时、每分钟的访问量吗?
  • 嗨,艾伦,我想显示每小时和每月的访问量。我最初只是想尽我所能地绘制它,然后从那里调整我的代码。

标签: r datetime plot time-series


【解决方案1】:

是的,您是对的,您需要同时提供日期列(x 轴)和值(y 轴)

这是一个简单的例子:

v1 <- data.frame(Date = mdy_hms(c("1-1-2020-00-00-00", "1-2-2020-00-00-00", "1-3-2020-00-00-00")), Value = c(1, 3, 6))
v2 <- xts(v1["Value"], order.by = v1[, "Date"])
plot(v2)

xts 的第一个参数取 x 值,在 order.by 我留下实际的 ts 对象

【讨论】:

    【解决方案2】:

    您需要计算每个时间段内的事件数量,并将这些值绘制在 y 轴上。您没有为可重现的示例提供足够的数据,因此我创建了一个小示例。我们将使用 tidyverse 包 dplyrlubridate 来帮助我们:

    library(lubridate)
    library(dplyr)
    library(ggplot2)
    
    set.seed(69)
    fullUsage <- data.frame(Dates = as.POSIXct("2020-01-01") +
                                    minutes(round(cumsum(rexp(10000, 1/25))))
                           )
    head(fullUsage)
    #>                 Dates
    #> 1 2020-01-01 00:02:00
    #> 2 2020-01-01 00:15:00
    #> 3 2020-01-01 00:22:00
    #> 4 2020-01-01 00:29:00
    #> 5 2020-01-01 01:13:00
    #> 6 2020-01-01 01:27:00
    

    首先,我们将创建显示事件发生的时间和月份的列:

    fullUsage$hours  <- hour(fullUsage$Dates)
    fullUsage$month  <- floor_date(fullUsage$Dates, "month")
    

    现在我们可以有效地计算每个月的事件数量并绘制每个月的这个数字:

    fullUsage %>% 
      group_by(month) %>% 
      summarise(n = length(hours)) %>%
      ggplot(aes(month, n)) + 
      geom_col()
    

    我们可以在一天中的某个时间做同样的事情:

    fullUsage %>% 
      group_by(hours) %>% 
      summarise(n = length(hours)) %>%
      ggplot(aes(hours, n)) + 
      geom_col() +
      scale_x_continuous(breaks = 0:23) +
      labs(y = "Hour of day")
    

    reprex package (v0.3.0) 于 2020 年 8 月 5 日创建

    【讨论】:

      猜你喜欢
      • 2021-10-07
      • 1970-01-01
      • 1970-01-01
      • 2017-03-17
      • 1970-01-01
      • 1970-01-01
      • 2020-07-12
      • 1970-01-01
      • 2018-02-24
      相关资源
      最近更新 更多