如何在R中将数据集转换为时间序列数据?

时间:2019-12-02 02:43:23

标签: r time-series

我有一个要转换为时间序列的数据框。以下是几行数据的图像。如您所见,数据框未包含每一天。那么,有没有办法将其更改为时间序列数据?因为我在这里提供的代码无法解决缺少的日子。

df3 <- ts(df2$Freq, start=c(2015), end=c(2017), frequency=365)

enter image description here

structure(list(Police_Killings = structure(c(16437, 16438, 16439, 
16440, 16441, 16442), class = "Date"), Freq = c(2L, 1L, 3L, 1L, 
4L, 4L)), row.names = c(NA, 6L), class = "data.frame")

5 个答案:

答案 0 :(得分:1)

ts通常不用于每日系列。它主要用于规则间隔的月度和季度系列。您可以将其表示为动物园或xts系列。

library(zoo)

d <- data.frame(date = "2017/01/01", Freq = 3)  # sample data
z <- read.zoo(d, format = "%Y/%m/%d")

答案 1 :(得分:1)

由于您拥有的数据是一个数据框,因此您可以使用complete中的tidyr填写缺失的日期,并在其Freq列中填充0。

tidyr::complete(df, Police_Killings = seq(min(Police_Killings), 
      max(Police_Killings), by = "1 day"), fill = list(Freq = 0))

然后可以根据需要将其转换为时间序列对象,以进行进一步处理。

答案 2 :(得分:0)

library(lubridate) df3$Police_Killings <- ymd(df3$Police_Killings) 软件包非常适合转换为日期格式。

{{1}}

答案 3 :(得分:0)

用于将数据帧转换为(每日)时间序列(ts)对象的Base R解决方案:

df$year_of_police_killings <- as.numeric(format(df$Police_Killings, "%Y"))

date_range <- range(df$Police_Killings)

year_range <- range(df$year_of_police_killings)

min_step_in_min_year <- min(as.numeric(strftime(df$Police_Killings[as.numeric(format(df$Police_Killings, "%Y")) == min(year_range)], "%j")))

max_step_in_max_year <- max(as.numeric(strftime(df$Police_Killings[as.numeric(format(df$Police_Killings, "%Y")) == max(year_range)], "%j")))

dat_ts <- ts(df$Freq, start = c(min(year_range), min_step_in_min_year),

            end = c(max(year_range), max_step_in_max_year), frequency = 365)

答案 4 :(得分:0)

您还可以使用tsibble包将其表示为时间序列:

library(tsibble)
ts_killings <- as_tsibble(df, index = Police_Killings)

您可以用

填补空白
ts_killings %>% 
    fill_gaps(Freq = 0)

在插图中可以找到有关使用tsibble的很好的介绍:Introduction to tsibble