【问题标题】:R and Excel - Calculate the mean of a list of hoursR 和 Excel - 计算小时列表的平均值
【发布时间】:2019-03-23 23:03:35
【问题描述】:

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

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 中解决。 有什么建议吗? 问候, 丽莎

【问题讨论】:

  • 你能粘贴输出str(mydata)
  • 嗨,桑尼,当然。这是(完整数据集的)> str(mydata)'data.frame':501 obs。 2 个变量:$ 黎明:因子 w/185 水平“”,“5:02”,“5:03”,..:131 129 128 126 125 123 121 120 118 117 ... $ 黄昏:因子 w/179级别 "","18:22","18:23",..: 54 55 56 57 58 59 60 61 62 63 ...
  • 在 Excel 中,您的数据或您使用的公式有些奇怪。使用 Excel 时间列,使用 AVERAGE 函数计算平均值没有问题。因此,您的时间可能不是您认为的那样,或者您使用了不正确的公式来计算平均值。

标签: r excel mean hour


【解决方案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

【讨论】:

    【解决方案2】:

    您也可以考虑使用 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)
    

    【讨论】:

      猜你喜欢
      • 2021-09-02
      • 2018-10-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-02
      • 1970-01-01
      • 2021-09-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多