【发布时间】:2016-11-28 15:56:10
【问题描述】:
我有一个模型可以预测某些事件的持续时间,并测量这些事件的持续时间。然后我想计算预测和测量之间的差异、平均差异和 RMSE。我可以做到,但格式真的很尴尬,不是我所期望的:
database <- data.frame(Predicted = c(strptime(c("4:00", "3:35", "3:38"), format = "%H:%M")),
Measured = c(strptime(c("3:39", "3:40", "3:53"), format = "%H:%M")))
database
> Predicted Measured
1 2016-11-28 04:00:00 2016-11-28 03:39:00
2 2016-11-28 03:35:00 2016-11-28 03:40:00
3 2016-11-28 03:38:00 2016-11-28 03:53:00
这是第一个怪事:为什么 R 会显示时间和日期,即使我明确指定了仅时间格式 (%H:%M),而且我的文件中没有日期数据开始?变得更奇怪了:
database$Error <- with(database, Predicted-Measured)
database$Mean_Error <- with(database, mean(Predicted-Measured))
database$RMSE <- with(database, sqrt(mean(as.numeric(Predicted-Measured)^2)))
> database
Predicted Measured Error Mean_Error RMSE
1 2016-11-28 04:00:00 2016-11-28 03:39:00 21 mins 0.3333333 15.17674
2 2016-11-28 03:35:00 2016-11-28 03:40:00 -5 mins 0.3333333 15.17674
3 2016-11-28 03:38:00 2016-11-28 03:53:00 -15 mins 0.3333333 15.17674
为什么变量Error 用分钟表示?对于Error,这不是一个糟糕的选择,但对于Mean_Error,它变得很难阅读。对于RMSE,情况更糟,但这可能是由于as.numeric 功能:如果我删除它,R 会抱怨'^' not defined for "difftime" objects。我的问题是:
- 是否可以显示以
%H:%M格式显示的前两列(Predicted和Measured)? - 对于其他 3 列(
Error、Mean_Error和RMSE)我想在几秒钟内比较%M:%S格式和格式,然后在两者中进行选择。可能吗?
编辑:为了更清楚,我的目标是将时间间隔的观察结果插入数据帧并计算时间间隔差异向量。然后,计算该向量的一些统计数据:平均值、RMSE 等。我知道我可以输入以秒为单位的时间观测值,但这看起来不太好:很难说 13200 秒是 3 小时 40 分钟.因此,我希望能够将时间间隔存储在%H:%M 中,然后能够以代数方式操作它们并以我选择的格式显示结果。这可能吗?
【问题讨论】:
-
对于第一个奇怪的东西,
strptime转换为POSIXlt,它会添加今天的日期。要仅显示小时和分钟,请使用:format(strptime(c("4:00", "3:35", "3:38"), format = "%H:%M"), format="%H:%M"),它们只是字符(即,您丢失了日期时间类) -
@aichao,我试过
database$Predicted <- format(strptime(database$Predicted, format = "%H:%M"), format="%H:%M"),但我得到了> database$Predicted [1] NA NA NA。我想这里真正的问题是我不需要 Date-Time 对象,但更像是一个时间间隔对象......是否有可能获得它? "