需要按国家/地区计算时间的平均值。时间是日期变量 - 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
答案 0 :(得分:2)
我发现你已经发现了在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-01
和00:00:00
中减去秒数。
答案 1 :(得分:1)
你是否想要这样做 -
dades$Time <- strptime(dades$Time,'%H:%M:%S')
by(dades$Time, dades$Country, mean)
如果我不明白你的问题,请你发表样本输出。