Se si desidera semplicemente convertirlo in classe "Date"
utilizzando il primo del mese, la soluzione di Roland sembra più diretta, ma ci sono alcune altre considerazioni come se si potrebbe voler utilizzare la fine del mese o se si davvero voglio rappresentare anno-mesi usando le date in primo luogo.
Il pacchetto zoo ha una classe "yearmon"
che può rappresentare anni di mesi direttamente senza convertirli in date e ha anche il metodo as.Date.yearmon
che ha un argomento frac=
può essere utilizzato per indicare la frazione del modo attraverso il mese di convertirsi se vuoi la classe "Date"
.
Innanzitutto, assicurarsi che le date siano stringhe di caratteri. L'input nella domanda mostra 1993.10 come uno degli input, quindi dobbiamo assicurarci che ci sia uno zero finale. (Se gli input hanno già carattere con lo zero finale, questo non è un problema. Abbiamo assunto il caso peggiore in questo caso assumendo valori numerici, quindi è necessario convertirli esplicitamente in puntini di caratteri con uno 0 finale, se necessario.) Ora utilizzare as.yearmon
con il formato "%Y.%m"
. Infine utilizzare as.Date.yearmon
per convertire in classe "Date"
.
Forse il più grande vantaggio di questo approccio è che siamo riusciti a lasciare il risultato in "yearmon"
classe (cioè omettere la parte "as.Date"
, ad esempio as.yearmon(sprintf("%.2f", dates))
o se le date sono state già stringhe di caratteri, dates.ch
, con un finale 0 nel caso di "1993.10"
poi basta as.yearmon(dates.ch, "%Y.%m")
, che in realtà rappresentare ciò che avete di meglio da quando il giorno non è veramente significativo, dato che non era lì all'inizio. "yearmon"
oggetti possono essere tracciati e risolto nel modo previsto.
Ecco la conversione Classe "Date"
utilizzando "yearmon"
:
library(zoo)
dates <- c(1993.07, 1993.08, 1993.09, 1993.1, 1993.11, 1993.12) # test input
as.Date(as.yearmon(sprintf("%.2f", dates), "%Y.%m")) # 1st of month
## [1] "1993-07-01" "1993-08-01" "1993-09-01" "1993-10-01" "1993-11-01" "1993-12-01"
as.Date(as.yearmon(sprintf("%.2f", dates), "%Y.%m"), frac = 1) # last of month
## [1] "1993-07-31" "1993-08-31" "1993-09-30" "1993-10-31" "1993-11-30" "1993-12-31"
o se l'ingresso di test è simile al seguente:
dates.ch <- c("1993.07", "1993.08", "1993.09", "1993.10", "1993.11", "1993.12") # input
as.Date(as.yearmon(dates.ch, "%Y.%m"))
as.Date(as.yearmon(dates.ch, "%Y.%m"), frac = 1)
Il '' dput' è x <- c (1.993,09, 1.993,1, 1.993,11, 1.993,12) ', ma le tue soluzioni funziona ancora. –
@DavidArenburg R non si cura se gli dai '1993.1' o' 1993.10'. Questo è un doppio identico. – Roland