0

我正在尝试从 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" .....

然后我尝试使用以下代码将其转换为时间序列对象:require(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。我已经包含了我的情节截图。

时间序列图

4

2 回答 2

0

您需要计算每个时间段内的事件数量并将这些值绘制在 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 包(v0.3.0)于 2020 年 8 月 5 日创建

于 2020-08-05T22:03:02.993 回答
0

是的,您是对的,您需要同时提供日期列(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 对象

于 2020-08-05T17:39:04.880 回答