2

这是我的数据集的一个示例:

> 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

我需要平均(timeMin),以便知道事件通常发生的时间(小时:分钟)。我试过这个:

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

它应该很简单,但我不知道该怎么做,因为我是初学者。我将不胜感激任何帮助。谢谢

4

2 回答 2

1

这真的不优雅,但我现在发现的唯一方法是将日期组件更改为同一天并计算结果的平均值。与lubridate

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

希望有人会提供更好的东西......

于 2013-09-26T08:32:59.140 回答
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"
于 2013-09-26T08:55:51.957 回答