2016-07-08 1 views
1

J'ai une colonne de temps dans mes données qui ressemble à ceci:Classification du temps jour en R pour l'analyse prédictive

9:41:12 AM 7:13:00 PM 4:15:54 PM 1:40:49 PM 12:52:37 PM 3:18:11 PM 5:00:02 PM 7:12:25 PM 5:34:47 PM 9:03:39 AM 
1:00:01 PM 1:00:16 PM 1:00:22 PM 1:00:41 PM 1:00:47 PM 1:00:53 PM 1:01:45 PM 1:01:54 PM 1:02:40 PM 

Je suis en train de créer une colonne cible pour le modèle de régression multinomiale dans l'analyse prédictive telle que Je peux mettre les plages de temps dans différents compartiments.

Un exemple de ma tentative est donnée ci-dessous:

ifelse(df$time > 10:00 AM & df$time < 1:00 PM, 1, 
ifelse(df$time >= 1:00 PM & df$time < 10:00 PM, 2, NA)) 

Il donne une erreur de symbole inattendu. J'ai regardé R: Seperating out a mixed data column, date above multiple times mais cela n'a pas résolu mon problème.

Aidez-nous s'il vous plaît.

Edit:

Exemple de dput:

structure(c(2630L, 1973L, 1560L, 183L, 1100L, 1419L, 1674L, 
1971L), .Label = c("1:00:01 PM", "1:00:16 PM", "1:00:22 PM", "1:00:41 PM", 
"1:00:47 PM", "1:00:53 PM", "1:01:45 PM", "1:01:54 PM"), class = "factor") 
+1

pouvez-vous s'il vous plaît montrer les résultats de dput sur votre objet df? – Stedy

Répondre

1

C'est la façon dont vous avez entré le temps dans les deux vos données et dans la comparaison.

Les dates doivent être dans le bon format (vous avez omis les secondes) et en tant que chaînes entre guillemets dans la comparaison.

Vous devez également vous assurer qu'il est stocké dans une classe appropriée et non en tant que caractère.

a <- c("9:41:12 AM", "9:41:12 PM") 
class(a) # Can't use character data the way you want to 

a <- data.frame(a=a,flag=NA) # Flag will indicate AM/PM 
a$flag <- grepl(" AM",a$a) 

require(lubridate)  # lubridate makes working with time fun and easy 
a$a <- hms(a$a)  # give it a proper class 
a$a[a$flag == F] <- a$a[a$flag == F] + hms("12:00:00") # add 12 hours if it's PM 
a 
a   flag 
1 9H 41M 12S TRUE 
2 21H 41M 12S FALSE 
# Now let's do a comparison: 
hms("12:00:00") > a$a #works 

[1] VRAI FAUX

+0

merci pour les faits saillants, très utile. Maintenant, à la comparaison. J'ai fait 'a $ b = ifelse (a $ a <'10H 00M 00S', 1, ifelse (a $ a> '10H 00M 00S', 2, NA))' avec la sortie '[1] 2 2' pendant que je attendait le résultat '[1] 1 2'. Que pensez-vous que pourrait être le problème? – user1783739