Si la variable Date
est un véritable vecteur de classe yearmon
, issu du package zoo, la méthode as.Date.yearmon
peut faire ce que vous voulez via son argument frac
.
En utilisant vos données, en supposant que la variable Date
était initialement un vecteur de caractères
library("zoo")
df <- data.frame(Date = c("2014-07", "2014-08", "2014-09"),
Arrivals = c(100, 150, 200))
Je convertis ceci en un vecteur de classe yearmon
:
df <- transform(df, Date2 = as.yearmon(Date))
En supposant que c'est ce que vous avez, alors vous pouvez obtenir ce que vous voulez en utilisant as.Date()
avec frac = 1
:
df <- transform(df, Date3 = as.Date(Date2, frac = 1))
ce qui donne:
> df
Date Arrivals Date2 Date3
1 2014-07 100 Jul 2014 2014-07-31
2 2014-08 150 Aug 2014 2014-08-31
3 2014-09 200 Sep 2014 2014-09-30
Cela montre les différentes étapes. Si vous ne voulez que la Date
finale, c'est une seule ligne
## en supposant que `Date` est un objet `yearmon`
df <- transform(df, Date = as.Date(Date, frac = 1))
## ou si ce n'est pas un `yearmon`
df <- transform(df, Date = as.Date(as.yearmon(Date), frac = 1))
L'argument frac
est la fraction du mois à attribuer aux dates résultantes lors de la conversion d'objets de type yearmon
en objets de type Date
. Ainsi, pour obtenir le premier jour du mois, plutôt que de convertir en caractère et de coller "-01"
comme le montrait votre question, il est préférable de convertir en objet Date
avec frac = 0
.
Si la variable Date
dans votre df
n'est pas un objet de classe yearmon
, alors vous pouvez résoudre votre problème en le convertissant en un objet de cette classe et en utilisant la méthode as.Date()
comme décrit ci-dessus.