我有一个要转换为时间序列的数据框。以下是几行数据的图像。如您所见,数据框未包含每一天。那么,有没有办法将其更改为时间序列数据?因为我在这里提供的代码无法解决缺少的日子。
df3 <- ts(df2$Freq, start=c(2015), end=c(2017), frequency=365)
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")
答案 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