r - 具有 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
任何建议都会很有用!
非常感谢!
解决方案
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"
推荐阅读
- javascript - JQuery 无法过滤我所有的依赖选择选项
- r - 如何在 ggplot2 中使用 geom_sf 来骑乘多边形边界
- typescript - lite-server 和 live-server 有什么区别?
- shell - Jenkins 管道因随机连接问题而失败
- reactjs - 如何在 React 中访问和更新嵌套对象数组
- html - 在仅使用 CSS 离开页面之前单击链接时如何淡出整个页面?
- reactjs - 在 asp.net 核心项目中使用 react js 有什么好处?
- c++ - gmplib 防止使用断点进行调试
- javascript - 如何使用两个按钮在两个框之间移动文本?
- xcode - 在 AppKit 中为 macOS SwiftUI 应用程序设置主窗口标题?