我正在尝试将R中的tbl_df转换为ts时间序列。以下是我的数据帧的head():
head(Investment)
# A tibble: 6 x 9
TIME_PERIOD GPDI_Chained LogGPDI CorpTaxX Baseline_Uncertainty gGDP PCE_Defl ofPagesFedReg logabsgGDP
<chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 1985 Q1 1122. 3.05 20.2 112. 3.9 1.82 50502 0.591
2 1985 Q2 1141. 3.06 19.8 119. 3.6 1.75 50502 0.556
3 1985 Q3 1134. 3.05 20.6 127. 6.2 1.77 50502 0.792
4 1985 Q4 1176. 3.07 20.1 124. 3 1.82 50502 0.477
5 1986 Q1 1175. 3.07 23.8 159. 3.8 1.60 44812 0.580
6 1986 Q2 1155. 3.06 24.3 135. 1.8 1.12 44812 0.255
我尝试使用以下方法将Tibble强制转换为ts:
> DF <- read.table("file_path", header=TRUE, sep=",", row.names=NULL)
> InvestmentTS<-as.ts(DF)
产生:
> head(InvestmentTS)
TIME_PERIOD GPDI_Chained LogGPDI CorpTaxX Baseline_Uncertainty gGDP PCE_Defl ofPagesFedReg logabsgGDP
[1,] 1 1122.3 3.050109 20.23836 112.1454 3.9 1.818 50502 0.5910646
[2,] 2 1141.4 3.057438 19.78908 118.5357 3.6 1.751 50502 0.5563025
[3,] 3 1133.7 3.054498 20.64556 127.1788 6.2 1.770 50502 0.7923917
[4,] 4 1175.5 3.070223 20.05952 123.7795 3.0 1.825 50502 0.4771213
[5,] 5 1175.1 3.070075 23.80535 158.5329 3.8 1.597 44812 0.5797836
[6,] 6 1154.6 3.062432 24.26877 135.1720 1.8 1.115 44812 0.2552725
这里的问题是我丢失了“季度”列(TIME_PERIOD
)。
现在,我还尝试使用以下方法将TIME_PERIOD列转换为yearqtr:
quarter<-c("1985-1" , ... , "2018-3")
> as.yearqtr(format(quarter), "%Y-%q")
但是,这是成功的,我不知道如何在ts中实现它,以便TIME_PERIOD列具有year_quarter日期而不是序数。
有人可以帮助解释如何将tbl_df转换为ts,以便显示TIME_PERIOD列中的日期吗?
如果这已经在其他地方回答了,或者我的回答太简单了,我事先表示歉意,我只是在学习R,并且只需要将此数据框设为ts即可,以便为我的时间序列回归模型运行一些诊断测试显然需要数据为ts。
谢谢。
答案 0 :(得分:1)
我认为这可能对您有帮助。
tbl$TIME_PERIOD <- as.yearqtr(tbl$TIME_PERIOD, format = "%Y Q%q")
ts(tbl[,-1], start = as.yearmon(tbl$TIME_PERIOD[1]), frequency = 4)
样本数据:
tbl <- read.table(header = TRUE, sep = "|", text = "
TIME_PERIOD|GPDI_Chained|LogGPDI|CorpTaxX|Baseline_Uncertainty|gGDP|PCE_Defl|ofPagesFedReg|logabsgGDP
1985 Q1|1122.|3.05|20.2|112.|3.9|1.82|50502|0.591
1985 Q2|1141.|3.06|19.8|119.|3.6|1.75|50502|0.556
1985 Q3|1134.|3.05|20.6|127.|6.2|1.77|50502|0.792
1985 Q4|1176.|3.07|20.1|124.|3|1.82|50502|0.477
1986 Q1|1175.|3.07|23.8|159.|3.8|1.60|44812|0.580")
答案 1 :(得分:1)
将其转换为动物园对象z
,然后转换为ts
:
library(zoo)
z <- read.zoo(tbl, FUN = as.yearqtr)
as.ts(z)
给予:
GPDI_Chained LogGPDI CorpTaxX Baseline_Uncertainty gGDP PCE_Defl ofPagesFedReg logabsgGDP
1985 Q1 1122 3.05 20.2 112 3.9 1.82 50502 0.591
1985 Q2 1141 3.06 19.8 119 3.6 1.75 50502 0.556
1985 Q3 1134 3.05 20.6 127 6.2 1.77 50502 0.792
1985 Q4 1176 3.07 20.1 124 3.0 1.82 50502 0.477
1986 Q1 1175 3.07 23.8 159 3.8 1.60 44812 0.580
tbl <-
structure(list(TIME_PERIOD = structure(1:5, .Label = c("1985 Q1",
"1985 Q2", "1985 Q3", "1985 Q4", "1986 Q1"), class = "factor"),
GPDI_Chained = c(1122, 1141, 1134, 1176, 1175), LogGPDI = c(3.05,
3.06, 3.05, 3.07, 3.07), CorpTaxX = c(20.2, 19.8, 20.6, 20.1,
23.8), Baseline_Uncertainty = c(112, 119, 127, 124, 159),
gGDP = c(3.9, 3.6, 6.2, 3, 3.8), PCE_Defl = c(1.82, 1.75,
1.77, 1.82, 1.6), ofPagesFedReg = c(50502L, 50502L, 50502L,
50502L, 44812L), logabsgGDP = c(0.591, 0.556, 0.792, 0.477,
0.58)), class = "data.frame", row.names = c(NA, -5L))
答案 2 :(得分:0)
更新:我强烈建议使用新的tidyverts软件包将时间序列集成到tidyverse样式的工作流程中:
来自Rob Hyndman的Hyndsight博客, 2019年8月29日:
使用小工具整理时间序列数据
有一套用于整理时间序列分析的新软件包, 轻松融入整洁的工作方式。我们称这些为 tidyverts软件包,它们在tidyverts.org上可用。大部分 这些软件包的工作已经由Earo Wang和Mitchell完成 O’Hara-Wild。
第一个进入CRAN的软件包是tsibble,提供 使用整理工具来整理整齐的时态数据的数据基础架构。一种 tsibble(在猫中发音为“ ts”)是时间序列对象 这比使用ts,xts等现有类容易得多 和其他人。
...我希望微调将成为处理R中的时态数据(包括多元时间序列,面板数据,ets)的标准。我已经使用它们大约一年了,但我仍然惊讶于做事比使用其他结构要容易得多。