2013-05-20 48 views
0

比方說,我有這些報頭下有很多值的數據幀:繪製從動物園時間序列截斷次

df <- data.frame(c("Tid", "Value")) 
#Tid.format = %Y-%m-%d %H:%M 

然後我把該數據幀交給動物園,因爲我要處理它作爲時間序列:

library("zoo") 
df <- zoo(df$Value, df$Tid) 

現在我想產生據稱應該做這樣的事情在這一天的時間每次測量是(即報廢日期信息,並只保留時間)順利散點圖:https://stat.ethz.ch/pipermail/r-help/2009-March/191302.html

但似乎time()函數根本不會產生任何時間;相反,它只是產生一個數字序列。無論我從該鏈接做什麼,我都無法在平均一天內得到價值的散點圖。實際執行工作(不使用動物園時間序列)的data.frame代碼如下所示(即從時間提取小時,將其轉換爲數字):

smoothScatter(data.frame(as.numeric(format(df$Tid,"%H")),df$Value) 

另一件事我想要做的就是產生每小時有多少次測量的密度圖。我使用常規data.frame繪製了幾​​個小時沒有問題,所以我擁有的數據沒有問題。但是當我嘗試使用動物園時,我會遇到錯誤,或者在嘗試通過Google找到的結果時得到錯誤的結果。

我還是設法得到的東西,通過這條線畫在:

plot(density(as.numeric(trunc(time(df),"01:00:00")))) 

但它是不正確的。它似乎又一次產生了一個從1到217的序列,我希望它能夠截斷任何日期信息,並保持時間四捨五入到幾個小時。

我能畫出這樣的:

plot(density(df)) 

它產生價值的密度圖。但是我想要一個關於每天每小時記錄多少個數值的密度圖。

所以,如果有人能幫我解決這個問題,那會很好。總之,我想要做的是:

1)smoothScatter(x軸:天(0-24時):值)

2)圖(密度(x軸,y軸:一天中的時間(0-24)))

編輯:

library("zoo") 
df <- data.frame(Tid=strptime(c("2011-01-14 12:00:00","2011-01-31 07:00:00","2011-02-05 09:36:00","2011-02-27 10:19:00"),"%Y-%m-%d %H:%M"),Values=c(50,52,51,52)) 
df <- zoo(df$Values,df$Tid) 
summary(df) 
df.hr <- aggregate(df, trunc(df, "hours"), mean) 
summary(df.hr) 
png("temp.png") 
plot(df.hr) 
dev.off() 

此代碼是,我有一些實際的值。我本來預計的「df.hr」的陰謀是一個小時平均,但相反,我得到一些奇怪的新指數,這是不是時間...

+0

代碼的最後一個點在問題中沒有定義時間(第二個參數'動物園'被省略),所以它認爲'1:nrow(df)'是時代。您想要的動物園對象是'動物園(df $ value,df $ Tid)'或'read.zoo(df)'。 –

+0

啊,我正在加載數據不正確。謝謝。但我仍然得不到滿意的結果。如果我運行'df.hr < - aggregate(df,trunc(df,「01:00:00」,mean)),那麼我只能得到15個值,如'99 90 87 88 89 91 92 86 78.60000 80.20000 81.23333 82.62500 83.30000 84.51818 85.35000 86.52353 87.46316 88.52162 89.50435 90.36047 91.20000 92.10000 99.90000'這就是一天之內的小時...... – GaRyu

+0

你需要提供一些可重現的東西。目前的形式無法真正回答。 –

回答

0

問題中的聚合語句有三個問題:

  1. 我們希望截斷沒有df。因此需要將其轉換回POSIXct

  2. 看來你不打算截斷到小時擺在首位,但要提取小時

  3. trunc.POSIXt不幸返回POSIXlt結果。

爲解決第一個兩分aggregate語句需要改爲:

tt <- as.POSIXct(trunc(time(df), "hours")) 
aggregate(df, tt, mean) 

但要解決這個問題需要完全改變

tt <- as.POSIXlt(time(df))$hour 
aggregate(df, tt, mean) 
+0

啊哈,所以99 ... 80的值畢竟是時間格式?有趣。有時令我難以置信的是R界面有多麼不直觀。但是我已經試過了你的代碼,並且它的輸出和完全沒有截斷的輸出完全一樣。日子還在;它不僅僅是小時。 – GaRyu

+0

它截斷到小時,但輸入已被截斷爲小時,所以當然,它不會改變它。看起來你希望提取小時而不是截斷到小時。我已經加入了答案。 –

+0

非常好,謝謝。似乎我需要更多地瞭解這種POSIX格式的日期格式... – GaRyu