繁体   English   中英

时间序列数据的子集

[英]Subsetting from time series data

我正在使用内置数据集。 数据是这样的。

数据是这样开始的

data(usmacro)

数据是时间序列。 数据来自:

             inf       une        tbi
1953 Q1  1.7904638  2.700000  1.9800000
1953 Q2  1.5219396  2.566667  2.1533333
1953 Q3  1.0957584  2.733333  1.9566667
1953 Q4  0.9877907  3.700000  1.4733333
1954 Q1  1.3478690  5.266667  1.0600000
1954 Q2  1.2936791  5.800000  0.7900000
1954 Q3  0.9297588  5.966667  0.8833333
1954 Q4  0.7216526  5.333333  1.0200000
1955 Q1  0.6671824  4.733333  1.2233333
1955 Q2  1.0739045  4.400000  1.4833333
1955 Q3  1.7834868  4.100000  1.8566667
1955 Q4  2.3351315  4.233333  2.3366667
1956 Q1  2.9235953  4.033333  2.3266667
1956 Q2  3.3019508  4.200000  2.5666667

该数据是一个时间序列。 谁能帮助我如何对时间序列进行子集化? 更具体地说,我想使用 1953 年第 2 季度的数据,我可以使用什么代码?

假设这是 bvarsv package 中的 usmacro,它是 mts/ts object 所以我们可以使用window ,如下所示。 有关详细信息,请参阅?window 除了数据,下面的代码没有使用任何包。

window(usmacro, start = c(1953, 2))

给予:

               inf       une        tbi
1953 Q2  1.5219396  2.566667  2.1533333
1953 Q3  1.0957584  2.733333  1.9566667
1953 Q4  0.9877907  3.700000  1.4733333
1954 Q1  1.3478690  5.266667  1.0600000
...snip...

尝试:

# Load data
ts <- usmacro

# See naming convention of years & quarters
timeSeries::getTime(ts)

# Filter data for '1953 Q2' or 1953.25
ts_sub <- ts[timeSeries::getTime(ts) >= 1953.25,]

或者这是我刚刚在Rob Hyndman 的网站上找到的另一种方式……我从未尝试过这种方式,但它看起来很整洁。

#libraries
library(tidyverse)
library(tsibble)
library(lubridate)

ts_sub <- ts %>% as_tsibble()
ts_sub <- filter(lubridate::yq(index) >= '1953-04-01')

@Shane

您可以使用dplyr package 进行过滤,但首先,为了更容易操作您的数据集,让我们创建一个带有行名的列:

# Loading dataset
dt <- data(usmacro)

# Creating a column called 'Year' and assigning the row's names.
dt['Year'] <- rownames(dt)

使用tidyr package,您可以将 Year 列分为两列,一个称为year ,另一个称为Quarter

# Installing and loading tidyr package
install.packages(tidyr)
library('tidyr')

dt %>% separate(Year, into=c('year', 'quarter'), sep='\\s')

之后,您只需要使用 dplyr 来过滤您的数据:

# Installing and loading **dplyr** package
install.packages(dplyr)
library('dplyr')

dt %>% filter(year==1953 & quarter=='Q2')

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM