【问题标题】:Mean of time - hh:mm:ss - group by a variable时间平均值 - hh:mm:ss - 按变量分组
【发布时间】:2013-12-29 20:27:19
【问题描述】:

需要按国家/地区计算时间的平均值。时间是一个日期变量 - hh:mm:ss

这个命令with(df,tapply(as.numeric(times(df$Time)),Country,mean))hh:mm:ss 中没有返回正确的平均值。

    Country Time
1   Germany 2:26:21
2   Germany 2:19:19
3   Brazil  2:06:34
4   USA     2:06:17
5   Eth     2:18:58
6   Japan   2:08:35
7   Morocco 2:05:27
8   Germany 2:13:57
9   Romania 2:21:30
10  Spain   2:07:23

输出:

>with(df,tapply(as.numeric(times(df$Time)),Country,mean))
      Andorra     Australia        Brazil        Canada         China 
   0.09334491    0.09634259    0.09578125    0.09634645    0.09481192 
      Eritrea      Ethiopia        France       Germany Great Britain 
   0.09709491    0.09010031    0.10025463    0.09713349    0.09524306 
      Ireland         Italy         Japan         Kenya       Morocco 
   0.09593750    0.09520255    0.09579630    0.08934854    0.09400463 
   New Zeland          Peru        Poland       Romania        Russia 
   0.09664931    0.09809606    0.09638889    0.09875000    0.09327932 
        Spain   Switzerland        Uganda United States      Zimbabwe 
   0.09314236    0.09620949    0.10068287    0.09399016    0.09892940 

【问题讨论】:

  • 检查聚合函数。

标签: r dataframe statistics mean hour


【解决方案1】:

我知道您已经发现在 R 中使用日期和时间值的痛苦...

这是你的想法吗?

df$nTime <- difftime(strptime(df$Time,"%H:%M:%S"),
                     strptime("00:00:00","%H:%M:%S"),
                     units="secs")
df.means <- aggregate(df$nTime,by=list(df$Country),mean)
df.means$Time <- format(.POSIXct(df.means$x,tz="GMT"), "%H:%M:%S")
df.means
  Group.1         x     Time
# 1  Brazil 7594.000  02:06:34
# 2     Eth 8338.000  02:18:58
# 3 Germany 8392.333  02:19:52
# 4   Japan 7715.000  02:08:35
# 5 Morocco 7527.000  02:05:27
# 6 Romania 8490.000  02:21:30
# 7   Spain 7643.000  02:07:23
# 8     USA 7577.000  02:06:17

第一行添加一列nTime,它是从午夜开始的时间,以秒为单位。 第二行计算均值。 第三行转换回 H:M:S。

您遇到的问题是strptime(...),当强制转换为数字时,返回1970-01-01 和指定时间之间的秒数今天。所以,一个非常大的数字。这段代码只是从今天的1970-01-0100:00:00 中减去秒数。

【讨论】:

    【解决方案2】:

    你想这样做吗?

    dades$Time <- strptime(dades$Time,'%H:%M:%S')
    by(dades$Time, dades$Country, mean)
    

    如果我不理解您的问题,请您发布示例输出。

    【讨论】:

    • +1。也许不是mean,而是传入fun,其中fun &lt;- function(X) strftime(mean(X), '%H:%M:%S')
    猜你喜欢
    • 2020-09-01
    • 2013-12-28
    • 1970-01-01
    • 1970-01-01
    • 2021-10-08
    • 1970-01-01
    • 2023-02-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多