2017-10-19 3 views
1

Salutations les gens qui connaissent R mieux que moi. Pour une classe, je travaille avec le jeu de données d'addition d'intégrité. Il y a 3 questions répétées deux fois qui impliquent des habitudes de sommeil (à quelle heure êtes-vous allée, est-ce AM ou PM, What minuet - ces 3 questions sont ensuite répétées pour quelle heure quelqu'un se réveille). L'utilisation de ces extraits de code que j'ai créé les 2 variables Cependant, sur une horloge de 24 heuresComment coder pendant des heures dormi en utilisant 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 

Je courais en quelques accrocs et je cherche la meilleure façon de procéder. Le premier gros problème que j'ai est d'essayer de comprendre comment les écraser ensemble pour obtenir une troisième variable qui me dit combien d'heures de sommeil, il suffit de les ajouter ou de les soustraire en raison de la nature cyclique du temps. Le plus petit problème que j'ai eu vient aussi de la nature cyclique jette le temps médian lorsque les gens vont au lit (légèrement gâcher avec le temps de réveil mais pas autant - quelqu'un se couche après 2400 beaucoup plus commun que quelqu'un se réveille à 0100) , parce que quelqu'un qui va se coucher à 0100 est allé au lit 1 heure plus tard que quelqu'un qui est allé se coucher à 2400, pas 23 heures plus tôt.

+0

nous avons besoin d'un 'data' (ie coller la sortie de' dput (data) '.' data' n'est pas non plus un grand nom de variable même si R est gd à trouver les choses. retour à vous mordre un jour – hrbrmstr

+0

Y compris un [exemple reproductible minimal] (https://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example) dans votre question augmentera vos chances d'obtenir une réponse – jsb

+0

Cela fonctionne beaucoup plus facile Si vous avez une date et l'heure. Ensuite, vous pouvez les combiner pour faire le calcul réel. – Reeza

Répondre

0

Pour résoudre vos deux problèmes, vous devez créer une heure de début pour la référence, puis avoir toutes vos valeurs temporelles comme x nombre d'heures après l'heure de début.

Depuis que je ne peux pas voir les données, je ne peux pas vous dire exactement comment le faire, mais il existe 2 solutions générales. Le premier (et le plus recommandé) est de les stocker en utilisant as.POSIXlt avec les heures de réveil étant le jour après les heures de sommeil. Deuxièmement, vous pouvez ajouter 24 à tous vos temps de veille. (Puis lors de l'impression d'un simple if(wakeup > 24){wakeup <- wakeup - 24} pour annuler ledit changement

Note:. Depuis vos 3 questions DonT vérifier explicitement, vous devrez faire des hypothèses et des conditions pour que le sujet est allé dormir/se réveilla sur le premier ou deuxième jour