J'ai un ensemble de données avec une variable entière qui dénote des observations prises à des intervalles de 5 minutes tout au long d'une journée complète, mais quand il compte jusqu'à 55, il incrémente l'heure. donc après "55" est "100", puis "105" ... et après "955" est "1000". Il s'agit essentiellement d'une horloge de 24 heures hh: mm, mais omet les zéros précédents. J'ai besoin de les convertir en objets temporels, mais je n'ai pas trouvé de fonction simple dans le package lubridate.
Mon dernier recours serait de convertir cette variable en chaîne, d'utiliser des boucles "if" pour coller sur 3, 2 ou 1 zéro dans chacune afin que je puisse appeler parse_date_time (data $ interval, "H! M!") Mais je Je me demande s'il y a une solution plus élégante que je ne connais pas?
1 réponse
Utilisez sprintf
pour convertir l'entier en chaîne de largeur fixe, puis convertissez-le en objet temporel.
x <- c(50, 55, 100, 105, 955, 1000)
as.POSIXct(sprintf("%04d", x), format = "%H%M", tz = "UTC")
#[1] "2019-11-04 00:50:00 UTC" "2019-11-04 00:55:00 UTC" "2019-11-04 01:00:00 UTC"
#[4] "2019-11-04 01:05:00 UTC" "2019-11-04 09:55:00 UTC" "2019-11-04 10:00:00 UTC"
Des résultats similaires peuvent également être obtenus avec stringr::str_pad
et strptime
strptime(stringr::str_pad(x, 4, pad = 0), format = "%H%M", tz = "UTC")
Ou en utilisant parse_date_time
lubridate::parse_date_time(sprintf("%04d", x), "HM")
De nouvelles questions
r
R est un langage de programmation et un environnement logiciel libres et open source pour le calcul statistique, la bioinformatique, la visualisation et le calcul général. Veuillez fournir des exemples minimaux et reproductibles avec la sortie souhaitée. Utilisez `dput ()` pour les données et spécifiez tous les packages non-base avec des appels à `library ()`. N'incorporez pas d'images pour des données ou du code, utilisez plutôt des blocs de code en retrait. Pour les questions liées aux statistiques, utilisez https://stats.stackexchange.com.