1
votes

conversion au format de date dans la trame de données dans R

Je souhaite convertir ma colonne Date au format de date réel. Je ne peux pas convertir avec as.Date. Pourriez-vous m'aider s'il vous plait? J'ai essayé de suivre. Mais ça ne marche pas. 1) as.POSIXct (as.character (df1 $ Date, format = "% Y% m% d")) 2) as.Date (as.character (Date), "% Y /% m% / d").

    > head(df1)
          Date                sim                obs
    2 43091.25 313.62295499999999             314.39
    3 43093.25 313.60034200000001             314.43
    4 43094.25         313.608948             314.31
    5 43095.25 313.56323200000003             314.24
    6 43096.25 313.52330000000001              314.2
    7 43097.25 313.47250000000003 314.29000000000002
    > str(df1)
   data.frame': 700 obs. of  3 variables:
     $ Date: chr  "43091.25" "43093.25" "43094.25" "43095.25" ...
     $ sim : chr  "313.62295499999999" "313.60034200000001" "313.608948" 
                      "313.56323200000003" ...
     $ obs : chr  "314.39" "314.43" "314.31" "314.24" ...


0 commentaires

3 Réponses :


1
votes

Les dates avec un modèle 43ddd.dd proviennent généralement d'Excel.
Vous pouvez utiliser openxlsx :

openxlsx::convertToDateTime(as.numeric("43091.25"))
[1] "2017-12-22 06:00:00 CET"


0 commentaires

0
votes

La réponse de Waldi est excellente et openxlsx est excellent. Comme alternative pour toute personne rencontrant cela à l'avenir, vous pouvez également utiliser le concierge:

  Date         sim   obs
  <date>     <dbl> <dbl>
1 2017-12-22  314.  314.
2 2017-12-24  314.  314.
3 2017-12-25  314.  314.

Produit:

df <- tribble(~Date, ~sim, ~obs,
      43091.25, 313.6222956, 314.39,
    43093.25, 313.60034200000001, 314.43,
    43094.25, 313.608948, 314.31)

df %>%
  mutate(Date = janitor::excel_numeric_to_date(Date))


0 commentaires

1
votes

Il n'est pas nécessaire d'utiliser des packages externes, spécifiez simplement l'origine utilisée par Excel:

Date <- c("43091.25", "43093.25", "43094.25", "43095.25", "43096.25", "43097.25")

as.Date(as.numeric(Date), origin = "1899-12-30")
# [1] "2017-12-22" "2017-12-24" "2017-12-25" "2017-12-26" "2017-12-27" "2017-12-28"


2 commentaires

Les heures sont tronquées


@Waldi Je pense que l'OP n'est qu'après la date.