我有一个模型可以预测某些事件的持续时间,并测量这些事件的持续时间。然后我想计算预测和测量之间的差异,平均差异和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
。我的问题是:
Predicted
格式中显示的前2列(Measured
和%H:%M
)?Error
,Mean_Error
和RMSE
)我想在几秒钟内比较%M:%S
格式和格式,并在二。可能吗? 编辑:为了更清楚,我的目标是将时间间隔的观察结果插入数据帧并计算时间间隔差异的向量。然后,计算该向量的一些统计数据:均值,RMSE等。我知道我可以在几秒钟内输入时间观察值,但这看起来并不是很好:很难说13200秒是3小时40分钟。因此,我希望能够将时间间隔存储在%H:%M
中,但是能够以代数方式操作它们并以我选择的格式显示结果。这可能吗?
答案 0 :(得分:1)
我们可以使用difftime
来指定时间差异的单位。 difftime
的输出是类difftime
的对象。当使用difftime
将此as.numeric
对象强制转换为数字时,我们可以更改这些单位(请参阅?difftime
中的示例):
## Note we don't convert to date-time because we just want %H:%M
database <- data.frame(Predicted = c("4:00", "3:35", "3:38"),
Measured = c("3:39", "3:40", "3:53"))
## We now convert to date-time and use difftime to compute difference in minutes
database$Error <- with(database, difftime(strptime(Predicted,format="%H:%M"),strptime(Measured,format="%H:%M"), units="mins"))
## Use as.numeric to change units to seconds
database$Mean_Error <- with(database, mean(as.numeric(Error,units="secs")))
database$RMSE <- with(database, sqrt(mean(as.numeric(Error,units="secs")^2)))
## Predicted Measured Error Mean_Error RMSE
##1 4:00 3:39 21 mins 20 910.6042
##2 3:35 3:40 -5 mins 20 910.6042
##3 3:38 3:53 -15 mins 20 910.6042