我到处都是,但是我找不到以前问这个问题的地方。

将这些数据放入适当的动物园系列的干净方法是什么?此版本是使此帖子更容易的副本/粘贴,但它始终以下表单(来自文本文件)出现。我的读取。我一直在努力找出一种将列作为索引的“四分之一”部分读取的非garbage方法,但它是草率的(太草率了,无法发布)。我猜这个问题已经解决,但找不到。

> texinp <- "   
+ Year   Qtr1  Qtr2  Qtr3  Qtr4   
+ 1992    566   443   329   341   
+ 1993    344   212   133   112   
+ 1994    252   252   199   207"   
> z <- read.zoo(textConnection(texinp), header=TRUE)
> z  

从as.yearqtr()文档中,目标看起来像:

1992 Q1 1992 Q2 1992 Q3 1992 Q4 1993 Q1 1993 Q2 1993 Q3 1993 Q4    
    566     443     329     341     344     212     133     112      

1994 Q1 1994 Q2 1994 Q3 1994 Q4     
    252     252     199     207    
有帮助吗?

解决方案

使用 read.zoo 然后将其转换为 zooreg 对象 yearqtr 时间索引:

texinp <- "Year   Qtr1  Qtr2  Qtr3  Qtr4   
1992    566   443   329   341   
1993    344   212   133   112   
1994    252   252   199   207"

library(zoo)

z <- read.zoo(text = texinp, header=TRUE)
zz <- zooreg(c(t(z)), start = yearqtr(start(z)), freq = 4)

结果看起来像这样:

> zz

1992 Q1 1992 Q2 1992 Q3 1992 Q4 1993 Q1 1993 Q2 1993 Q3 1993 Q4 1994 Q1 1994 Q2 1994 Q3 1994 Q4 
    566     443     329     341     344     212     133     112     252     252     199     207 

其他提示

read.zoo 假设您的数据最多有一个时间指数列,因此您必须自己处理。首先阅读它 read.table

zt <- read.table( textConnection( texinp ), header = TRUE)

然后使用 melt 来自 reshape 包裹:

require(reshape)
zt.m <- melt( zt, id = 'Year', variable_name = 'Qtr')

> zt.m
   Year  Qtr value
1  1992 Qtr1   566
2  1993 Qtr1   344
3  1994 Qtr1   252
4  1992 Qtr2   443
5  1993 Qtr2   212
6  1994 Qtr2   252
7  1992 Qtr3   329
8  1993 Qtr3   133
9  1994 Qtr3   199
10 1992 Qtr4   341
11 1993 Qtr4   112
12 1994 Qtr4   207

最后创建您的期望 zoo 目的:

z <- with( zt.m, zoo( value, as.yearqtr(paste(Year, Qtr), format = '%Y Qtr%q')))

> z
1992 Q1 1992 Q2 1992 Q3 1992 Q4 1993 Q1 1993 Q2 1993 Q3 1993 Q4 1994 Q1 1994 Q2 
    566     443     329     341     344     212     133     112     252     252 
1994 Q3 1994 Q4 
    199     207 
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top