2017-10-19 1 views
-1

Pour simplifier, j'ai créé le code suivant:Conversion du temps en R à 24 heures

some_data <- c(1, 12, 500, 1800, 9, 1230) 
    df <- as.data.frame(some_data) 

Je voudrais convertir ces temps à une échelle de 24 heures. Par exemple, la sortie finale doit être (1300, 1200, 1700, 1800, 900, 1230)

Les principaux problèmes que j'ai rencontrés sont que certaines des données n'ont pas le 0 ou 00 de fin, comme avec 1PM , mais d'autres le font. Je ne suis pas sûr de la façon dont j'ajouterais cela uniquement aux moments qui me manquent. Ces temps sont des temps de classe, donc 12-7 est tous les PM, tandis que 8-11 serait AM. Existe-t-il un moyen plus efficace de le faire, ou dois-je le changer manuellement parce que les temps changent?

+0

@MauritsEvers parce que les temps entre 8-11 sont AM et PM sont 12-7 fois. Comme ce sont des heures de classe il n'y a pas de classe à 1h ou 21h – Jordan

+0

Merci, aurait dû lire plus attentivement. C'est clairement indiqué dans votre question. Ma faute. PS. Pas mon downvote. –

Répondre

1

Il doit être sûr d'assumer toutes les fois moins de 100 doivent être multipliés par 100. Après cela, il est juste une question de correction des fois avant 800:


correct_times <- function(times) { 
    times_hmm <- ifelse(times < 100, 
         times * 100, 
         times) 

    ifelse(times_hmm < 800, 
     times_hmm + 1200, 
     times_hmm) 
} 
correct_times(c(1, 12, 500, 1800, 9, 1230)) 
#> [1] 1300 1200 1700 1800 900 1230 
1

Il est un travail pour votre ensemble d'échantillons

df$some_data=ifelse(df$some_data>100,df$some_data/100,df$some_data) 
df$some_data=ifelse((df$some_data>=8&df$some_data<=11)|df$some_data>=12,df$some_data,df$some_data+12) 

df$some_data*100 
[1] 1300 1200 1700 1800 900 1230