2017-10-19 51 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個問題不明確檢查,你將需要做出一些假設和條件爲主體是否睡着了/睡醒就第一天或第二天