2013-12-11 68 views
3

需要計算按國家/地區的時間平均值。時間是日期變量 - hh:mm:ss平均時間 - hh:mm:ss - 變量組

此命令with(df,tapply(as.numeric(times(df$Time)),Country,mean)) 未返回正確的平均值hh:mm:ss

Country Time 
1 Germany 2:26:21 
2 Germany 2:19:19 
3 Brazil 2:06:34 
4 USA  2:06:17 
5 Eth  2:18:58 
6 Japan 2:08:35 
7 Morocco 2:05:27 
8 Germany 2:13:57 
9 Romania 2:21:30 
10 Spain 2:07:23 

輸出:

>with(df,tapply(as.numeric(times(df$Time)),Country,mean)) 
     Andorra  Australia  Brazil  Canada   China 
    0.09334491 0.09634259 0.09578125 0.09634645 0.09481192 
     Eritrea  Ethiopia  France  Germany Great Britain 
    0.09709491 0.09010031 0.10025463 0.09713349 0.09524306 
     Ireland   Italy   Japan   Kenya  Morocco 
    0.09593750 0.09520255 0.09579630 0.08934854 0.09400463 
    New Zeland   Peru  Poland  Romania  Russia 
    0.09664931 0.09809606 0.09638889 0.09875000 0.09327932 
     Spain Switzerland  Uganda United States  Zimbabwe 
    0.09314236 0.09620949 0.10068287 0.09399016 0.09892940 
+0

檢查?聚合函數。 – Fernando

回答

1

你們是不是要做到這一點 -

dades$Time <- strptime(dades$Time,'%H:%M:%S') 
by(dades$Time, dades$Country, mean) 

如果我不明白你的問題,你能不能請張貼樣本輸出。

+0

+1。也許不是'mean',而是傳入'fun',其中'fun < - function(X)strftime(mean(X),'%H:%M:%S')''。 –

1

我看你已經發現與R中的日期和時間值工作的痛苦......

這是你腦子裏有什麼?

df$nTime <- difftime(strptime(df$Time,"%H:%M:%S"), 
        strptime("00:00:00","%H:%M:%S"), 
        units="secs") 
df.means <- aggregate(df$nTime,by=list(df$Country),mean) 
df.means$Time <- format(.POSIXct(df.means$x,tz="GMT"), "%H:%M:%S") 
df.means 
    Group.1   x  Time 
# 1 Brazil 7594.000 02:06:34 
# 2  Eth 8338.000 02:18:58 
# 3 Germany 8392.333 02:19:52 
# 4 Japan 7715.000 02:08:35 
# 5 Morocco 7527.000 02:05:27 
# 6 Romania 8490.000 02:21:30 
# 7 Spain 7643.000 02:07:23 
# 8  USA 7577.000 02:06:17 

第一行添加一列nTime這是時間,單位爲秒,由於午夜。 第二行計算平均值。 第三行轉換回H:M:S。

您遇到的問題是strptime(...)時候,就不得不轉換爲數值,返回的今天第二之間1970-01-01和指定的時間數量。所以,一個非常大的數字。此代碼僅從今天的1970-01-0100:00:00中減去秒數。