Comment soustraire mois à compter de la date de R?
J'essaie de soustraire n mois à compter d'une date comme suit:
maturity <- as.Date("2012/12/31")
m <- as.POSIXlt(maturity)
m$mon <- m$mon - 6
mais la date obtenue est 01-Jul-2012
, et pas 30-Jun-2012
, que je devrais attendre.
Est-il court chemin pour obtenir un tel résultat?
Merci d'avance
- Double Possible de Ajouter un mois à une Date
- Cette vieille question de 2011 a déjà une excellente réponse résumant plusieurs approches possibles. Donc, je ne vois pas de raison de déclarer ce que d'un duplicata d'un Q de 2013. Peut-être, il devrait être dans l'autre sens?
- L'autre question est aussi de nombreuses années et a également beaucoup d'excellentes réponses. Aussi les réponses sur l'autre question avec le bord des cas, ce ne pas. Ma raison pour le marquage des doublons a cette question était celui que je trouve le plus facilement et il n'a pas de résoudre mon problème, c'est seulement après que la recherche beaucoup plus difficile que j'ai trouvé l'autre question qui n'a la réponse dont j'avais besoin (plus précisément le deuxième). Méta dit le moins complète de la question devrait être le double, même si c'est plus récent.
- G. Grothendiek réponse ne comprennent déjà
lubridate
et a été mis à jour. - ok, vous voulez me marque à la question des doublons alors? Comment puis-je supprimer le drapeau de cette question?
Vous devez vous connecter pour publier un commentaire.
1) seq.Date. Notez que juin a seulement 30 jours, donc il ne peut pas donner juin 31 ainsi, au lieu de cela, il donne le 1er juillet.
Si nous savions que c'était à la fin du mois que nous pourrions le faire:
2) yearmon. Aussi, si nous savions que c'était la fin du mois, puis nous avons pu utiliser le
"yearmon"
classe du zoo paquet comme ça:Ce convertit la date de
"yearmon"
soustrait 6 mois (.5 d'un an), puis le convertit en arrière pour"Date"
à l'aide defrac=1
qui signifie la fin du mois (frac=0
signifierait le début du mois). Cela a aussi l'avantage par rapport à la solution précédente, qu'il est vectorisé automatiquement, c'est à direas.Date(...)
aurait pu être un vecteur de dates.Noter que si
"Date"
classe est uniquement utilisé comme un moyen de représenter les mois, puis nous pouvons nous en débarrasser complètement et utiliser directement"yearmon"
depuis que des modèles de ce que nous voulons en premier lieu:3) mondate. Une troisième solution est la mondate paquet qui a l'avantage ici qu'il renvoie à la fin du mois il y a 6 mois sans avoir besoin de savoir que nous sommes en fin de mois:
C'est aussi vectorisé.
4) lubridate. Cette lubridate réponse a été modifié en fonction de l'évolution du package:
lubridate est également vectorisé.
5) sqldf/SQLite
ou si nous savions que nous étions à la fin du mois:
mondate
solution dans la réponse.as.Date("2012/12/31") - months(x)
j'ai eu les résultats escomptés. Avec x = 1,3,5,6 j'ai eu NA. Une idée de pourquoi cela se produit?as.Date("2012/12/20") - months(1:12)
par exemple.vous pouvez utiliser lubridate paquet pour cette
il n'y a pas de raison pour changer les jours sur le terrain.
vous pouvez définir votre date de retour pour le dernier jour dans le mois par
bonne chance!!!