在R中处理时间序列的最佳做法是什么?

c00*_*ter 9 r time-series

我使用R进行时间序列的统计分析.我试过谷歌搜索,但我似乎无法找到任何明确的答案.任何了解更多的人都可以指出我正确的方向吗?

例:

假设我想对两个时间序列进行线性回归.时间序列包含每日数据,但这里可能存在差距,因此时间序列不是常规的.当然,我只想比较两个时间序列都有数据的数据点.这就是我目前将csv文件读入数据框的过程:

library(zoo)
apples <- read.csv('/Data/apples.csv', as.is=TRUE)
oranges <- read.csv('/Data/oranges.csv', as.is=TRUE)
apples$date <- as.Date(apples$date, "%d/%m/%Y")
oranges$date <- as.Date(oranges$date, "%d/%m/%Y")
zapples <- zoo(apples$close,apples$date)
zoranges <- zoo(oranges$close,oranges$date)
zdata <- merge(zapples, zoranges, all=FALSE)
data <- as.data.frame(zdata)
Run Code Online (Sandbox Code Playgroud)

这样做有一种更明智的方式吗?

另外,我如何切片数据,例如,data在一定时期内选择日期中的条目?

G. *_*eck 11

尝试这些方面的东西.这假设日期在第1列中.dyn包可用于转换lm,glm许多类似的回归类型函数可用于接受动物园系列.写dyn$lm代替lm如图所示:

library(dyn) # also loads zoo
fmt <- "%d/%m/%Y"
zapples <- read.zoo('apples.csv', header = TRUE, sep = ",", format = fmt)
zoranges <- read.zoo('oranges.csv', header = TRUE, sep = ",", format = fmt)
zdata <- merge(zapples, zoranges)
dyn$lm(..whatever.., zdata)
Run Code Online (Sandbox Code Playgroud)

您不需要,all = FALSE因为lm在其na.action参数的默认设置下将忽略具有NAs的行.

window.zoo函数可用于切片数据.

根据您的要求,您可能还需要查看xts和quantmod包.


J. *_*in. 6

为什么要将两个数据帧转换为zoo合并并转换回数据帧?如果你想要一个数据框,只需在你的后面运行这一行read.csv().

data <- merge(apples, oranges, by = "date")
Run Code Online (Sandbox Code Playgroud)

以下是如何分组.

subset(data, date < slicemax & date > slicemin)
Run Code Online (Sandbox Code Playgroud)