首页 > 解决方案 > 具有 NA 的时间序列的频率(R 软件)

问题描述

我想在 R 中使用时间序列,但我一开始就卡住了,因为我的频率有问题。我有 30 年的月度数据(开始日期 = 1988,结束日期 = 2018),但有时会有漏洞:我有几个月或几年没有数据。我宁愿不进行插值或调解以填补漏洞,而只是使用 na.omit 省略空的月份/年份。问题是我将有一些年份有 12 个月,而其他年份则有更少的几个月。我的问题是..我现在如何确定和使用我的频率?

这里以两年为例:

YEAR    MONTH   Temp    Salt
1988    1   NA  NA
1988    2   NA  NA
1988    3   NA  NA
1988    4   NA  NA
1988    5   NA  NA
1988    6   NA  NA
1988    7   16.45388889 37.4064537
1988    8   17.48898148 37.89002778
1988    9   NA  NA
1988    10  NA  NA
1988    11  15.8050463  38.08833333
1988    12  NA  NA
1989    1   NA  NA
1989    2   10.74912037 38.2787037
1989    3   NA  NA
1989    4   NA  NA
1989    5   NA  NA
1989    6   14.52092593 37.71060185
1989    7   16.84342593 37.32300926
1989    8   17.97930556 37.82277778
1989    9   NA  NA
1989    10  NA  NA
1989    11  16.23837963 38.00009259
1989    12  13.6325463  37.97509259

任何建议都会很有用!
非常感谢!

标签: rtime-seriesfrequencyna

解决方案


zoo 包中的 zooreg 类适用于这种类型的情况,即您具有潜在的规律性,但某些值可能不存在。

假设在最后的注释中输入,这将产生一个频率为 12 的 zooreg 序列。这是一个频率为 12 但没有所有值的时间序列。替换text = Lines为您的文件名,例如“myfile.dat”以从文件中读取它。请注意,yearmon 类将时间存储为一年加上 0 表示一月,1/12 表示二月,2/12 表示三月等。

library(zoo)

to_ym <- function(y, m) as.yearmon(paste(y, m, sep = "-"))

z <- read.zoo(text = Lines, header = TRUE, index = 1:2, FUN = to_ym, regular = TRUE)
z <- na.omit(z)
frequency(z)
## [1] 12

这个问题不清楚你到底有什么(一个文件?一个数据框?)但是如果你有一个 data.frame DF 从中读取它。to_ym 来自上面。

DF <- read.table(text = Lines, header = TRUE)
z <- read.zoo(DF, index = 1:2, FUN = to_ym, regular = TRUE)
z <- na.omit(z)

要恢复 NA,只需将其转换为 ts 系列:

z_na <- as.zooreg(as.ts(z))

此外,如果您决定填写 NA,则有几个可用的例程,包括 na.spline、na.approx、na.StructTS(卡尔曼滤波器)和 na.locf。

我们现在可以像这样使用 z:

as.integer(time(z)) # year
cycle(time(z)) # month (1 = Jan, 2 = Feb, ...)
start(z) # starting time of series
end(z) # ending time of series

plot(z)

plot(scale(z), screen = 1, col = 1:2)
legend("bottomleft", leg = names(z), col = 1:2, lty = 1)

library(ggplot2)

autoplot(z)
autoplot(z) + facet_free()
autoplot(z, facet = NULL)
autoplot(scale(z), facet = NULL)

笔记

Lines <- "
YEAR    MONTH   Temp    Salt
1988    1   NA  NA
1988    2   NA  NA
1988    3   NA  NA
1988    4   NA  NA
1988    5   NA  NA
1988    6   NA  NA
1988    7   16.45388889 37.4064537
1988    8   17.48898148 37.89002778
1988    9   NA  NA
1988    10  NA  NA
1988    11  15.8050463  38.08833333
1988    12  NA  NA
1989    1   NA  NA
1989    2   10.74912037 38.2787037
1989    3   NA  NA
1989    4   NA  NA
1989    5   NA  NA
1989    6   14.52092593 37.71060185
1989    7   16.84342593 37.32300926
1989    8   17.97930556 37.82277778
1989    9   NA  NA
1989    10  NA  NA
1989    11  16.23837963 38.00009259
1989    12  13.6325463  37.97509259"

推荐阅读