Méthode pour créer à la fin du mois de la date à partir de la date de la variable dans [r] bloc de données
J'ai un [r] gros bloc de données avec la date de variables qui reflètent premier jour du mois. Est un moyen facile de crète, un nouveau bloc de données date de la variable qui représente le dernier jour du mois?
Ci-dessous est un exemple de données:
date.start.month=seq(as.Date("2012-01-01"),length=4,by="months")
df=data.frame(date.start.month)
df$date.start.month
"2012-01-01" "2012-02-01" "2012-03-01" "2012-04-01"
Je voudrais revenir une nouvelle variable avec:
"2012-01-31" "2012-02-29" "2012-03-30" "2012-04-27"
J'ai essayé de le prédécesseur, mais il a été unsucessful:
df$date.end.month=seq(df$date.start.month,length=1,by="+1 months")
Les orientations de cette nouvelle [r] l'utilisateur serait grandement apprécié.
Votre exemple de sortie ne correspond pas à la question.
Vous pourriez aussi envisager d'utiliser
G. Grothendieck: Merci pour votre suggestion, je vais avoir à penser à utiliser la yearmon classe pour ce type de données de date dans le futur.
Vous pourriez aussi envisager d'utiliser
"yearmon"
classe qui représente année/mois sans avoir besoin d'un jour en premier lieu: library(zoo); ym <- as.yearmon("2012-01") + 0:3/12
. Si vous ne souhaitez que des dates sur le dernier jour du mois, puis as.Date(ym, frac = 1)
.G. Grothendieck: Merci pour votre suggestion, je vais avoir à penser à utiliser la yearmon classe pour ce type de données de date dans le futur.
OriginalL'auteur MikeTP | 2012-02-29
Vous devez vous connecter pour publier un commentaire.
Pour obtenir la fin du mois, vous pouvez simplement créer un
Date
vecteur contenant le 1er de tous les mois suivants, et soustrayez 1 jour.bibliothèque(lubridate) date d'.commencer.mois=seq(comme.Date("2012-01-01"),longueur=4,by="mois") df=données.cadre(en date.commencer.mois) df$date.fin.mois=df$date.commencer.mois+mois(1)-jours(1) df$date.commencer.mois df$date.fin.mois "2012-01-01" "2012-02-01" "2012-03-01" "2012-04-01" "2012-01-31" "2012-02-29" "2012-03-31" "2012-04-30"
Il ressemble à son travail pour moi, mais votre exemple de sortie a été source de confusion: Pourquoi le 27 avril?
James: Mon appologies... le 27 avril a été un typoand devrait avoir lu "2012-04-30". Merci pour votre aide.
OriginalL'auteur James
Voici une autre solution à l'aide de la lubridate package:
Cette utilise le même concept donné par James ci-dessus, en ce qu'il obtient le premier jour du mois suivant et soustrait un jour.
Par la manière, ce sera le travail même lorsque la date d'entrée n'est pas nécessairement le premier jour du mois. Ainsi, par exemple, c'est aujourd'hui le 27 du mois et il renvoie toujours le bon dernier jour du mois:
days(1)
est en fait inutile. Il suffit de faireceiling_date(Sys.Date(), "month") - 1
. Juste pour les futurs visiteurs...OriginalL'auteur Boops Boops
Utilisation timeLastDayInMonth de la heuredate package:
OriginalL'auteur Martien Lubberink
Une fonction comme ci-dessous pourraient faire le travail (à supposer dt est scalaire) -
Si vous avez un vecteur de Dates, puis effectuez les opérations suivantes -
OriginalL'auteur Steve Lihn
Une solution simple serait d'utiliser le
yearmon
fonction avec l'argumentfrac=1
de laxts
-paquet.frac
est un nombre entre 0 et 1 qui indique la proportion de la manière grâce à la période que le résultat représente.Ou si vous préférez “tuyauterie” à l'aide de
magrittr
:OriginalL'auteur hvollmeier