我有一个小时列表,我想计算平均值。该列表如下所示:
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:00,结果是18:30。黄昏时分同样的问题)。我不知道Excel问题是否取决于时区,所以我想在R中解决任何建议?问候,丽莎
您可以使用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
您也可以考虑使用lubridate包。 hm
函数可以处理小时:分钟格式。 period_to_seconds
和seconds_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)