1) ISODate la question de clarification, car il renvoie à la fin de l'année et à la date à laquelle nous supposons que l'entrée correspond à l'année fiscale indiquée dans la question (plus nous avons ajouté le cas marginal «1999-00») ainsi qu'au mois et au jour de la fin de l'année. Nous supposons que la sortie désirée est la fin de l'année en tant qu'objet Date. (Si ce n'est pas la question voulue et que vous voulez juste l'année fiscale en fin de mois, voir Note à la fin.)
Pour revenir au problème supposé, supposons, par exemple, que 31 mars est la fin de l'année. Ci-dessous nous extrayons le premier 4 caractères de Year
en utilisant substring
, convertissons cela en numérique et ajoutons 1. Puis nous passons cela avec le mois et le jour à ISODate
et finalement le convertir en Date. Aucune expression régulière ou package n'est utilisé.
# test inputs
month <- 3
day <- 31
Year <- c("1999-00", "2001-02", "2002-03", "2003-04")
# yearends
as.Date(ISOdate(as.numeric(substring(Year, 1, 4))+1, month, day))
## [1] "2000-03-31" "2002-03-31" "2003-03-31" "2004-03-31"
manipulation de chaînes 2) Une solution alternative en utilisant les mêmes entrées est le suivant. Il est similaire sauf que nous utilisons sub
avec une expression régulière qui correspond au moins et deux caractères suivants en substituant une chaîne de longueur zéro pour eux, convertit en numérique et ajoute 1. Ensuite, il met en forme une chaîne dans un format acceptable à as.Date
en utilisant sprintf
et s'applique enfin as.Date
. Aucun paquet n'est utilisé.
as.Date(sprintf("%d-%d-%d", as.numeric(sub("-..", "", Year))+1, month, day))
## [1] "2000-03-31" "2002-03-31" "2003-03-31" "2004-03-31"
Note: Si vous ne vouliez l'année de fin d'année fiscale en nombre alors il serait juste ceci:
as.numeric(substring(Year, 1, 4)) + 1
Pourquoi ne pas utiliser simplement 'sous (« -. * » , '', Year) 'pour la première année ou' paste0 ('20 ', sub ('. * - ',' ',' 2001-02 ')) 'pour la seconde – Sotos
' sub ("^ (..) ..- (..) $ "," \\ 1 \\ 2 "," 2001-02 ")' pour la deuxième année. – lmo
N'utilisez simplement pas d'expressions régulières pour les dates. Ils n'attraperont jamais les choses "le 31 avril". Seuls les analyseurs de date font, et nous en avons beaucoup. Utilisez-les et recommandez leur utilisation. –