Ecco alcune alternative. Restituiscono tutti gli anni numerici, ma se hai davvero bisogno di una stringa che inizia con FY, allora utilizza paste0("FY", result)
dove result
è uno dei risultati qui sotto. Tutti supportano l'input vettoriale, ovvero l'input dates
può essere un vettore.
1) zoo :: as.yearmon Il pacchetto zoo ha una classe che rappresenta "yearmon"
anno/mesi dell'anno + frazione dove frazione = 0 per gennaio, 1/12 per febbraio, 2/12 per la marcia e così sopra.
Usando questo one-liner lo farà. Sottrae 4/12 (da aprile è fine anno) e aggiunge 1 (cioè aggiungi un anno). Quindi per ottenere il convertito anno a numerico e prendere la parte intera:
library(zoo)
as.numeric(as.yearmon(dates) - 4/12 + 1) %/% 1
## [1] 2016 2015 2015
2) POSIXlt Ecco una soluzione che non utilizza alcun pacchetto. Converti le date nella classe POSIXlt. Il componente mo
rappresenta Jan come 0, Feb 1, ecc. Quindi se siamo maggio o successivo (mo
è 4 o più), l'anno fiscale è il seguente anno solare, altrimenti è l'anno solare corrente. La componente year
degli oggetti POSIXlt è il numero di anni a partire dal 1900 in modo da aggiungere l'anno 1900 più 1 se siamo a maggio o poi:
lt <- as.POSIXlt(dates)
lt$year + (lt$mo >= 4) + 1900
## [1] 2016 2015 2015
3) formato Aggiungi l'anno a 1 se il mese è maggiore o uguale a 5 (oa zero se non). Questo utilizza anche senza pacchetti:
as.numeric(format(dates, "%Y")) + (format(dates, "%m") >= "05")
## [1] 2016 2015 2015
4) substr. Possiamo estrarre l'anno utilizzando substr
, convertire in numerico e aggiungere 1 se il mese estratto (estratto anche utilizzando substr
) è "05" o superiore .; Ancora nessun pacchetto è usato.
as.numeric(substr(dates, 1, 4)) + (substr(dates, 6, 7) >= "05")
## [1] 2016 2015 2015
5) read.table usa questo anche senza pacchetti.
with(read.table(text = format(dates), sep = "-"), V1 + (V2 >= 5))
## [1] 2016 2015 2015
Nota: Abbiamo usato questo come l'ingresso dates
:
dates <- as.Date(c("2015-05-01", "2015-04-30", "2014-09-01"))
Possibile duplicato? http://stackoverflow.com/questions/26684514/how-to-calculate-mean-by-date-grouped-as-fiscal-quarters –
Non trovo questa soluzione particolarmente chiara - O non sono intelligente abbastanza per capirlo Probabilmente quest'ultimo. –