2013-09-26 165 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