2017-10-19 50 views
1

问候知道R比我更好的人。对于我正在使用添加健康数据集的课程。有三个问题重复两次,涉及睡眠模式(你要去哪个小时,是上午还是下午,什么分钟 - 这三个问题然后重复,直到有人醒来)。使用这些代码段我已经创建了一个24小时制如何编码使用R的时间睡眠

data$H4SP2T[data$H4SP2T %in% c(6, 8)] <- NA 
data$H4SP2M[data$H4SP2M %in% c(96, 98)] <- NA 
data$H4SP2H[data$H4SP2H %in% c(96, 98)] <- NA 
data$ampm2 <- car::recode(data$H4SP2T, "1=0; 2=12") 
data$ampm2[data$H4SP2H==12 & data$H4SP2T==2]<-0 
data$sleep <- data$H4SP2H + data$ampm2 + data$H4SP2M/60 


data$H4SP1T[data$H4SP1T %in% c(6, 8)] <- NA 
data$H4SP1M[data$H4SP1M %in% c(96, 98)] <- NA 
data$H4SP1H[data$H4SP1H %in% c(96, 98)] <- NA 
data$ampm <- car::recode(data$H4SP1T, "1=0; 2=12") 
data$ampm[data$H4SP1H==12 & data$H4SP1T==2]<-0 
data$wakeup <- data$H4SP1H + data$ampm + data$H4SP1M/60 

summary(data$sleep) 
Min. 1st Qu. Median Mean 3rd Qu. Max. NA's 
1.00 12.00 22.00 17.44 23.00 107.63 1390 

summary(data$wakeup) 
    Min. 1st Qu. Median Mean 3rd Qu. Max. NA's 
    1.000 5.750 6.500 7.023 7.500 23.500 1404 

我遇到了几个碰壁不过,和正在寻找如何最好地进行了2个变量。我遇到的第一个重大问题是试图弄清楚如何将这些混合在一起以获得第三个变量,该变量告诉我有人睡了多少小时,因为时间的循环性质,简单地增加或减少它们将不起作用。我遇到的一个小问题也是来自时间周期性的时代,它们抛弃了人们上床睡觉的中间时间(略微影响了起床时间,但不是那么多 - 2400后有人睡觉比0100醒来更常见) ,因为0100上床的人比24小时上床的人晚了1小时,而不是23小时。

+0

我们需要'数据'(即粘贴'输出(数据)'数据''数据'也不是一个很好的变量名,即使R是gd在计算事情。回到咬你有一天 – hrbrmstr

+0

在你的问题包括一个[最小可重现的例子](https://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example)将增加你的机会得到答案 – jsb

+0

这个工作更容易我如果你有日期和时间。然后你可以合并它们来做实际的计算。 – Reeza

回答

0

为了解决您的两个问题,您需要创建一个开始时间以供参考,然后将所有时间值导出为开始时间之后的x小时。

由于我无法看到数据,我无法告诉你究竟如何做到这一点,但有2个通用解决方案。首先(也是最推荐的)是使用as.POSIXlt来存储它们,其中唤醒时间是睡眠时间之后的一天。

其次是你可以添加24到所有你的觉醒时间。 (然后在打印简单if(wakeup > 24){wakeup <- wakeup - 24}撤消上述变更

注:由于您的3个问题不明确检查,你将需要做出一些假设和条件为主体是否睡着了/睡醒就第一天或第二天