R和Excel-计算小时列表的平均值

时间:2019-03-23 14:37:41

标签: r excel mean hour

我有一个小时列表,我想计算平均值。列表如下所示:

mydata
       dawn  dusk
1      7:12 19:14
2      7:10 19:15
3      7:09 19:16
4      7:07 19:17
5      7:06 19:18
6      7:04 19:19
7      7:02 19:20
8      7:01 19:21

我在R中尝试过,但由于对象不是数字或逻辑,所以找不到计算均值的方法。我可以这样计算平均值

mean(as.numeric(mydata$dusk)

但是我不明白结果(57.5)。 我在Excel中尝试过,但无法正常工作。如果我尝试像这样的小样本(mydata)正在工作,但是数据集有500行,而Excel显示了一个奇怪的结果(例如:在黎明时间列表中,所有时间或多或少在05:00 AM到08之间:00 AM,结果是18:30。黄昏时间同样的问题)。我不知道Excel问题是否取决于时区,所以我想在R中解决。 有什么建议吗? 问候, 丽莎

2 个答案:

答案 0 :(得分:1)

您可以使用chron实现这一目标 在您的情况下,您需要消除以下因素:

mydata$dusk <- paste0(as.character(mydata$dusk), ":00")

使用chron::times

mean(chron::times(mydata$dusk))
[1] 19:17:30

或如下

format(mean(strptime(mydata$dusk, "%H:%M:%S")), "%H:%M:%S")
[1] 19:17:30

答案 1 :(得分:0)

您也可以考虑使用lubridate软件包。 hm函数可以处理小时:分钟格式。 period_to_secondsseconds_to_period可以正确处理时间类别。

library(tidyverse)
library(lubridate)


mydata2 <- mydata %>% 
  mutate_all(list(~hm(.))) %>%
  summarize_all(list(~seconds_to_period(mean(period_to_seconds(.)))))
mydata2
#          dawn        dusk
# 1 7H 6M 22.5S 19H 17M 30S

数据

mydata <- read.table(text = "       dawn  dusk
1      '7:12' '19:14'
                     2      '7:10' '19:15'
                     3      '7:09' '19:16'
                     4      '7:07' '19:17'
                     5      '7:06' '19:18'
                     6      '7:04' '19:19'
                     7      '7:02' '19:20'
                     8      '7:01' '19:21'",
                     header = TRUE, stringsAsFactors = FALSE)