2017-08-06 101 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"