描述时间变量的统计数据

时间:2015-10-22 11:07:45

标签: r time-series

我想计算人们上床睡觉时的简单描述性统计数据(平均值等)。我遇到了两个问题。原始数据来自一个Excel文件,其中只是人们上床睡觉的时间 - 以24小时格式输入。我的问题是,到目前为止,无法确认人们是否在第二天凌晨1点上床睡觉。意思是一个人在晚上10点睡觉的时间是凌晨1点(而不是21点)的3小时。

在我的数据框中,变量in_bed是一种POSIXct格式,所以我想应用一个if函数来告诉我,如果时间是在12:00之前,那么我想要添加24小时。

我的功能是:

Patr$in_bed <- if(Patr$in_bed <= ) {
  Patr$in_bed + 24*60*60
}

我的数据框架如下所示

                        in_bed 
1          1899-12-30 22:13:00
2          1899-12-30 23:44:00
3          1899-12-30 00:08:00

如果我运行我的函数,我的变量将被删除,并打印以下错误消息:

Warning message:
In if (Patr$in_bed < "1899-12-30 12:00") { :
  the condition has length > 1 and only the first element will be used

我做错了什么或者有没有更好的主意?我可以在POSIXct格式中运行诸如mean之类的命令,如果不是,我该怎么做?

1 个答案:

答案 0 :(得分:0)

当你比较Patr $ in_bed(向量)和“1899-12-30 12:00”(单值)时,你会得到一个逻辑向量。但IF语句需要单个逻辑,因此它会生成警告并仅考虑向量的第一个元素。

您可以尝试:

Patr$in_bed <- Patr$in_bed + 24*60*60 * (Patr$in_bed < as.POSIXct("1899-12-30 12:00"))

解释:括号中的比较将返回一个逻辑向量,该向量将转换为整数(0表示FALSE,1表示TRUE)。然后声明为真的日期为+ 24 * 60 * 60,其他日期为+0。

但由于POSIXct格式包含日期,我没有看到添加24小时的目的。例如,

as.POSIXct("1899-12-31 01:00:00") - as.POSIXct("1899-12-30 22:00:00")

返回3小时的时差,而不是21小时。

要回答您的上一个问题,是的,您可以计算POSIXct向量的平均值,只需使用:

mean(Patr$in_bed)

希望它有所帮助, 的Jérémy