2017-08-06 81 views
0

我有一个数据帧是这样的:订购动物园对象 - 顺序

month  SYMBOL val1 val2 val3 
Jan/2017  A 3 4 6 
Feb/2017  A 1 2 4 
Mar/2017  A 2 5 3 
Apr/2017  A 4 3 6 
May/2017  A 6 2 8 
Jan/2017  B 7 3 1 
Feb/2017  B 3 7 3 
Mar/2017  B 1 3 6 
Apr/2017  B 7 2 8 
May/2017  B 9 7 2 
Jan/2017  C 0 8 6 
Feb/2017  C 1 3 9 
Mar/2017  C 3 3 1 
Apr/2017  C 4 1 5 
May/2017  C 6 7 1 

当我把它转换成一个动物园的对象与yearmon为指标,符号栏的变化是这样的:

SYMBOL val1 val2 val3 
Jan/2017 A 3 4 6 
Jan/2017 B 7 3 1  
Jan/2017 C 0 8 6 
Feb/2017 A 1 2 4 
Feb/2017 B 3 7 3 
Feb/2017 C 1 3 9 
Mar/2017 A 2 5 3 
Mar/2017 B 1 3 6  
Mar/2017 C 3 3 1 
Apr/2017 A 4 3 6  
Apr/2017 B 7 2 8  
Apr/2017 C 6 2 8  
May/2017 A 9 7 2 
May/2017 B 4 1 5 
May/2017 C 6 7 1 

有没有一种方法可以在创建zoo对象时按顺序排序几年,以​​便SYMBOLS保持为AAA,BBB,CCC而不是变形? zoo不可避免地将其改为JAN JAN JAN FEB FEB FEB而不是1月 - 5月为符号A,1月 - 5月为符号B等等。

+1

什么是你的代码? – AK88

回答

1

动物园对象是一个时间序列,特别是时间序列有秩序的观察。如果你想表示一个不是时间序列的对象,那么要么不使用动物园,要么以某种方式将它重新加工成时间序列。

1)多元时间序列虽然所呈现(参见下面的注释Lines中的数据)不是通过拆分它的第二输入栏的时刻系列它可被表示为一个多变量的时间序列:

library(zoo) 
z <- read.zoo(text = Lines, split = 2, FUN = as.yearmon, format = "%b/%Y", header = TRUE) 

给予:

> z 
     val1.A val2.A val3.A val1.B val2.B val3.B val1.C val2.C val3.C 
Jan 2017  3  4  6  7  3  1  0  8  6 
Feb 2017  1  2  4  3  7  3  1  3  9 
Mar 2017  2  5  3  1  3  6  3  3  1 
Apr 2017  4  3  6  7  2  8  4  1  5 
May 2017  6  2  8  9  7  2  6  7  1 

2)由多个时间序列可替换地的列表时,它也将是可能的表示我吨作为动物园对象的by列表:

DF <- read.table(text = Lines, header = TRUE) 
byz <- by(DF[-2], DF[2], function(x) read.zoo(x, FUN = as.yearmon, format = "%b/%Y")) 

,并提供:

> byz 
SYMBOL: A 
     val1 val2 val3 
Jan 2017 3 4 6 
Feb 2017 1 2 4 
Mar 2017 2 5 3 
Apr 2017 4 3 6 
May 2017 6 2 8 
------------------------------------------------------------ 
SYMBOL: B 
     val1 val2 val3 
Jan 2017 7 3 1 
Feb 2017 3 7 3 
Mar 2017 1 3 6 
Apr 2017 7 2 8 
May 2017 9 7 2 
------------------------------------------------------------ 
SYMBOL: C 
     val1 val2 val3 
Jan 2017 0 8 6 
Feb 2017 1 3 9 
Mar 2017 3 3 1 
Apr 2017 4 1 5 
May 2017 6 7 1 

3)合成的索引这可能是难以操纵这样的对象,但在覆盖所有人们可以合成的可能性来自SYMBOL和month列的新索引来创建一个带有像这样的字符索引的动物园系列。

myindex <- function(sym, mon) paste(sym, format(as.yearmon(mon, "%b/%Y"), "%Y-%m")) 
z2 <- read.zoo(text = Lines, index = 2:1, FUN = myindex, header = TRUE) 

给予以下动物园对象:

> z2 
      val1 val2 val3 
A 2017-01 3 4 6 
A 2017-02 1 2 4 
A 2017-03 2 5 3 
A 2017-04 4 3 6 
A 2017-05 6 2 8 
B 2017-01 7 3 1 
B 2017-02 3 7 3 
B 2017-03 1 3 6 
B 2017-04 7 2 8 
B 2017-05 9 7 2 
C 2017-01 0 8 6 
C 2017-02 1 3 9 
C 2017-03 3 3 1 
C 2017-04 4 1 5 
C 2017-05 6 7 1 

注:在重现的形式输入:

Lines <- "month SYMBOL val1 val2 val3 
Jan/2017 A 3 4 6 
Feb/2017 A 1 2 4 
Mar/2017 A 2 5 3 
Apr/2017 A 4 3 6 
May/2017 A 6 2 8 
Jan/2017 B 7 3 1 
Feb/2017 B 3 7 3 
Mar/2017 B 1 3 6 
Apr/2017 B 7 2 8 
May/2017 B 9 7 2 
Jan/2017 C 0 8 6 
Feb/2017 C 1 3 9 
Mar/2017 C 3 3 1 
Apr/2017 C 4 1 5 
May/2017 C 6 7 1"