2013-09-26 201 views
2

這是我的數據集的例子:(小時R-計算平均時間變量的均值(DATETIME)

> head(daily[,c(6,7)])->test 
> head(test) 
       timeMin min 
316 2013-05-02 13:45:00 3239 
317 2013-05-03 12:30:00 3260 
318 2013-05-04 12:30:00 3165 
319 2013-05-05 12:30:00 3404 
320 2013-05-06 12:30:00 3514 
321 2013-05-07 13:15:00 3626 

我需要的意思(時間min),以瞭解what's一天的時間:分鐘)通常發生的事件。我曾經嘗試這樣做:

library(lubridate) 
> test$hourMin<-paste(hour(test$timeMin),minute(test$timeMin),sep=":」) 
> test$hourMin <- hm(test$hourMin) 

而且我得到了這一點:

> head(test) 
       timeMin min hourMin 
316 2013-05-02 13:45:00 3239 13H 45M 0S 
317 2013-05-03 12:30:00 3260 12H 30M 0S 
318 2013-05-04 12:30:00 3165 12H 30M 0S 
319 2013-05-05 12:30:00 3404 12H 30M 0S 
320 2013-05-06 12:30:00 3514 12H 30M 0S 
321 2013-05-07 13:15:00 3626 13H 15M 0S 

然而,當我試圖計算平均值我沒有結果:

> mean(test$hourMin) 
[1] 0 

它應該是簡單的,但我不知道該怎麼做,因爲我是初學者。我將不勝感激任何幫助。謝謝

+0

什麼給'class(timeMin)'? – juba

+0

>類(測試$時間min) [1] 「POSIXct」「POSIXt」>類(測試$ hourMin) [1] 「週期」 ATTR( 「包」) [1] 「lubridate」 –

回答

1

這真的不是優雅,但我現在發現的唯一方法是將日期組件更改爲同一天,並計算結果的平均值。隨着lubridate

time <- df$timeMin 
time <- update(time, year=2000, month=1, mday=1) 
mean(time) 
# [1] "2000-01-01 12:50:00 CET" 

希望有人將提供更好的東西...

+0

你的溶液似乎適用於我的整個數據集 '>平均(每日$ hourMin,na.rm = TRUE) [1]「2000-01-01 14:30:45 UTC」' 但是,當我要求平均值「治療」使用tapply它給了我一個未格式化的結果我不知道如何處理 '> tapply(每日$小時,每日$治療,FUN =平均值,na.rm = TRUE) 環境升高 946736754 946737321' –

+0

請問,我怎麼知道治療的平均子集? –

0

我計算秒過去的2013年1月1日午夜,然後服用該均值和增加它回到2013年1月1日午夜。

我想有一些軟件包可以從一個命令中做到這一點,但是如果你像我一樣,不希望太依賴軟件包,那麼這個解決方案應該適合你。

library(data.table) 

timetable <- data.table(TimeMin = c("2013-05-02 13:45:00", 
            "2013-05-03 12:30:00", 
            "2013-05-04 12:30:00", 
            "2013-05-05 12:30:00", 
            "2013-05-06 12:30:00", 
            "2013-05-07 13:15:00") 
) 

timetable <- timetable[, TimePastMin := 
          difftime(
           "2013-01-01 00:00:00", 
           TimeMin, 
           units = "secs" 
          ) 
         ] 

meanTimePastMin <- mean(timetable[, TimePastMin]) 

meanTimeMin <- strptime("2013-01-01 00:00:00", "%Y-%m-%d %H:%M:%S") - meanTimePastMin 

meanTimeMin 
# "2013-05-05 00:50:00 IST" 
+0

你的解決方案很聰明,但是結果d對我來說看起來沒什麼邏輯,因爲數值在12:30到13:45之間變化,所以平均值應該介於兩者之間。你的結果是00:50,所以可能是錯誤的格式,它實際上意味着12:50。我對嗎? –

+0

此外,當我試圖根據變量「處理」(即環境濃度和濃度升高)得出平均值時,結果未格式化,我無法讀取它(每日$ meanTimeMin,每日$治療,FUN =意思是) 環境升高 1372714379 1372714379' –

+0

我還沒有檢查答案,但它看起來是正確的。例如,1,3,5,7的平均值是4,而不是奇數。如果你只是將HHMI組件的含義和刪除ddmmyy組件,那麼你應該得到1300左右,而不是0100左右。您的分組平均值可能是R的第零個數據(1970年1月1日,請重新檢查)之後的秒數,因此您的平均值可以計算爲'meanTimeMin < - strptime(「1970-01-01 00:00:00」, 「%Y-%m-%d%H:%M:%S」)+ 1372714379 – TheComeOnMan