2015-09-09 20 views
9

Ho un frame di dati in R con la settimana dell'anno che vorrei convertire in una data. So che devo scegliere un anno e un giorno della settimana in modo da sto riparando quei valori a 2014 e 1. La conversione di questo per una data sembra semplice:Numero di settimana di conversione ad oggi

as.Date(paste(2014,df$Week,1,sep=""),"%Y%U%u") 

Ma questo codice funziona solo se settimana è maggiore di 9. Settimana 1 - 9 restituisce NA. Se cambio la settimana a 01,02,03 ... restituisce ancora NA.

Qualcuno vede cosa mi manca?

+0

Eventuali duplicati di [Transform Anno/Settimana per oggetto data in R] (https://stackoverflow.com/questions/45549449/transform-year-week-to-date-object-in-r) – Uwe

+0

Attenzione delle diverse convenzioni su come contare la settimana dell'anno. Per favore, vedi [questa risposta] (https://stackoverflow.com/a/45587644/3817004) per una discussione. – Uwe

risposta

11

as.Date sta chiamando da 1 a 9 come NA, in quanto prevede due cifre per il numero della settimana e non è in grado di analizzarlo correttamente.

Per risolvere il problema, aggiungere un po '- per dividere le cose:

as.Date(paste(2014, df$Week, 1, sep="-"), "%Y-%U-%u") 
+0

r toglie il '0' in 01 in dati numerici - guarda l'output di' paste (2014,01,1, sep = "") '-" 201411 ". Potresti fare 'paste (2014," 01 ", 1, sep =" ")' per renderlo carattere, ma se i tuoi dati sono numerici che non funzionano facilmente. – jeremycg

+2

Attenzione alle diverse convenzioni su come contare la settimana dell'anno. Per favore, vedi [questa risposta] (https://stackoverflow.com/a/45587644/3817004) per una discussione. – Uwe

2

Una soluzione alternativa è quella di utilizzare l'aritmetica delle date da lubridate pacchetto:

lubridate::ymd("2014-01-01") + lubrdiate::weeks(df$Week - 1) 

Il -1 è necessario perché 2014-01-01 è già la settimana 1. In altre parole, vogliamo

  • df$Week == 1 per mappare 2014-01-01 (che è ymd("2014-01-01") + weeks(1-1))
  • df$Week == 2 per mappare 2014-01-08 (che è ymd("2014-01-01") + weeks(2-1))
  • e così via.
+0

In che modo generalizzi questo per tenere conto del cambio di anni? – Phil

+0

Attenzione alle diverse convenzioni su come contare la settimana dell'anno. Per favore, vedi [questa risposta] (https://stackoverflow.com/a/45587644/3817004) per una discussione. – Uwe

Problemi correlati