【问题标题】:R - Automatically split time series in equal partsR - 自动将时间序列分成相等的部分
【发布时间】:2020-02-02 19:04:53
【问题描述】:

我正在尝试使用校准周期进行回归模式。为此,我想将我的时间序列分成 4 个相等的部分。

library(lubridate)
date_list = seq(ymd('2000-12-01'),ymd('2018-01-28'),by='day')
date_list = date_list[which(month(date_list) %in% c(12,1,2))] 

testframe = as.data.frame(date_list)
testframe$values = seq (1, 120, length = nrow(testframe))

上面的测试框架有 18 个季节,我想将其分为 4 个部分,即 2 个 4 个冬季的周期和 2 个 5 个冬季的周期。

我的尝试是:

library(lubridate)
aj = year(testframe[1,1])
ej = year(testframe[nrow(testframe),1])

diff = ej - aj

但是当我现在用 4 划分 diff 时,它是 4.5,但我需要 4、4、5、5 之类的东西并用它来提取季节。知道如何自动执行此操作吗?

【问题讨论】:

  • 您可以创建一个包含您想要划分的日期范围的查找表,并将它们加入您的数据中。

标签: r split timestamp time-series lubridate


【解决方案1】:

你可以这样开始:

library(lubridate)
testframe$year_ <- year(testframe$date_list)
testframe$season <- getSeason(testframe$date_list)

如果您想知道getSeason() 函数的来源,请阅读this。现在您可以根据季节拆分数据集:

by4_1 <- testframe[testframe$year_ %in% as.data.frame(table(testframe$year_))$Var1[1:4],] 
by4_2 <- testframe[testframe$year_ %in% as.data.frame(table(testframe$year_))$Var1[5:8],]
by5_1 <- testframe[testframe$year_ %in% as.data.frame(table(testframe$year_))$Var1[9:13],]
by5_2 <- testframe[testframe$year_ %in% as.data.frame(table(testframe$year_))$Var1[14:18],]

现在你可以测试它了,例如:

table(by4_1$year_, by4_1$season)    
       Fall Winter
  2000   14     17
  2001   14     76
  2002   14     76
  2003   14     76

【讨论】:

    猜你喜欢
    • 2011-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-10
    • 2014-05-14
    • 2015-05-23
    • 1970-01-01
    相关资源
    最近更新 更多