2011-10-24 165 views
6

親愛的社區,動物園對象聚集

我收到將在數據幀中的數據:

Var_1  Var_2   Date  VaR_3 VaR_4 VaR_5 Var_6 
1   4  2010-01-18   7 apple 10 sweet 
2   5  2010-07-19   8 orange 11 sour 
3   6  2010-01-18   9 kiwi  12 juicy 
...  ...  ...    ... ...  ... ... 

我想用動物園,因爲它似乎是一個靈活的對象類。我剛剛開始使用R,我嘗試閱讀該包的描述(小插曲)。

問題:

  1. 鑑於上述數據作爲數據幀,這是推薦給完整DF轉換成動物園對象方法,告訴動物園,它應當使用第三列作爲日期列(日期可以在數據中出現多次)?
  2. 如何每月彙總所有其他列,但使用動物園內置函數的列4和列6除外?動物園是否能夠自動放棄分類變量,並只使用那些適合聚合的列?
  3. 對於第4列中的每個類別,我如何每月彙總所有數字列(不包括第6列,因爲它是非數字的)。

感謝您的支持。

+0

似乎問題1的工作: df.z <-read.zoo(DF,index.column = 3,合計= F) – John

回答

4

動物園對象是時間序列,通常是數字向量或矩陣。看起來你真正擁有的是一系列不同的時間序列,其中第5列確定了它的系列。也就是說,有一個蘋果系列,一個橙色系列,一個奇異果系列等,每個系列都有幾列。

刪除最後一列,因爲它不是數字,使用第三列第5列的索引和分裂我們:

# create test data 
Lines <- "Var_1  Var_2   Date  VaR_3 VaR_4 VaR_5 Var_6 
1   4  2010-01-18   7 apple 10 sweet 
2   5  2010-07-19   8 orange 11 sour 
3   6  2010-01-18   9 kiwi  12 juicy" 
cat(Lines, "\n", file = "data.txt") 

library(zoo) 
z <- read.zoo("data.txt", header = TRUE, index = 3, split = "VaR_5", 
    colClasses = c(Var_6 = "NULL")) 

結果是:

> z 
      Var_1.apple Var_2.apple VaR_3.apple VaR_5.apple Var_1.kiwi 
2010-01-18   1   4   7   10   3 
2010-07-19   NA   NA   NA   NA   NA 
      Var_2.kiwi VaR_3.kiwi VaR_5.kiwi Var_1.orange Var_2.orange 
2010-01-18   6   9   12   NA   NA 
2010-07-19   NA   NA   NA   2   5 
      VaR_3.orange VaR_5.orange 
2010-01-18   NA   NA 
2010-07-19   8   11 

上述假設對於列5的給定值,日期是唯一的。如果不是這種情況,則包括aggregate = mean參數或aggregate的其他值。

到現在聚合成一個每月動物園系列有:

aggregate(z, as.yearmon, mean) 

這也有可能通過使用FUN = as.yearmon參數,將其轉換馬上到每月:

zm <- read.zoo("data.txt", header = TRUE, index = "Date", split = "VaR_4", 
    FUN = as.yearmon, colClasses = c(Var_6 = "NULL"), aggregate = mean) 

?read.zoovignette("zoo-read")?aggregate.zoo以及其他短片和幫助文件。

+0

親愛的Gabor, 感謝您的回覆和周到的建議。實際上,我的數據集更復雜。在這個例子中,我以某種方式減少了數據框,以顯示最重要的屬性。 分割的哪一列將被使用未知。還有更多的列包含數字或類別。使用你的方法,當我想要通過動物園對象執行聚合時,我必須手動對它們進行分類。是否有辦法在每列上使用邏輯測試,以便總結並保留動物園對象中包含數字數據的那些列? – John

+0

進一步說明:在第一步中,我希望按照所有數據進行彙總。第二步是分類分類。有可能對每個類別在同一日期出現條目。這應該是確定的,因爲我想在大多數情況下只確定每月的總和,平均數和絕對數。 – John

+0

我想你假設對象有數字和非數字列。動物園對象基於矢量或矩陣,不能包含不同類別的混合。在這種情況下,它們都應該是數字。它不清楚你指的是哪一列的分裂是未知的。最後你必須知道它是什麼。您可以將數據讀入data.frame並在數據框上使用read.zoo(read.zoo的第一個參數可以是數據框)。如果你願意,這可以用不同的分割多次完成以獲得不同的動物園對象。 –