Disons que j'ai une date dans R et qu'elle est formatée comme suit.
date
2012-02-01
2012-02-01
2012-02-02
Existe-t-il un moyen dans R d'ajouter une autre colonne avec le jour de la semaine associé à la date? Le jeu de données est vraiment volumineux, il n’aurait donc pas de sens de passer manuellement et d’apporter les modifications.
df = data.frame(date=c("2012-02-01", "2012-02-01", "2012-02-02"))
Donc, après avoir ajouté les jours, cela ressemblerait à ceci:
date day
2012-02-01 Wednesday
2012-02-01 Wednesday
2012-02-02 Thursday
Est-ce possible? Quelqu'un peut-il m'indiquer un paquet qui me permettra de le faire? J'essaie juste de générer automatiquement le jour par la date.
df = data.frame(date=c("2012-02-01", "2012-02-01", "2012-02-02"))
df$day <- weekdays(as.Date(df$date))
df
## date day
## 1 2012-02-01 Wednesday
## 2 2012-02-01 Wednesday
## 3 2012-02-02 Thursday
Edit: Juste pour montrer une autre manière ...
Le composant wday
d'un objet POSIXlt
est le jour de la semaine numérique (0 à 6 à partir du dimanche).
as.POSIXlt(df$date)$wday
## [1] 3 3 4
que vous pouvez utiliser pour sous-définir un vecteur de caractères composé de noms de jours
c("Sunday", "Monday", "Tuesday", "Wednesday", "Thursday",
"Friday", "Saturday")[as.POSIXlt(df$date)$wday + 1]
## [1] "Wednesday" "Wednesday" "Thursday"
Chercher ?strftime
:
%A
Nom complet du jour de la semaine dans les paramètres régionaux actuels
df$day = strftime(df$date,'%A')
Utilisez le package lubridate
et la fonction wday
:
library(lubridate)
df$date <- as.Date(df$date)
wday(df$date, label=TRUE)
[1] Wed Wed Thurs
Levels: Sun < Mon < Tues < Wed < Thurs < Fri < Sat
Supposons que vous souhaitiez en outre que la semaine commence le lundi (au lieu de la valeur par défaut le dimanche), les éléments suivants sont utiles:
require(lubridate)
df$day = ifelse(wday(df$time)==1,6,wday(df$time)-2)
Le résultat est le nombre de jours compris dans l'intervalle [0, .., 6].
Si vous voulez que l'intervalle soit [1, .. 7], utilisez ce qui suit:
df$day = ifelse(wday(df$time)==1,7,wday(df$time)-1)
... Ou bien:
df$day = df$day + 1
Cela devrait faire l'affaire
df = data.frame(date=c("2012-02-01", "2012-02-01", "2012-02-02"))
dow <- function(x) format(as.Date(x), "%A")
df$day <- dow(df$date)
df
#Returns:
date day
1 2012-02-01 Wednesday
2 2012-02-01 Wednesday
3 2012-02-02 Thursday
start = as.POSIXct("2017-09-01")
end = as.POSIXct("2017-09-06")
dat = data.frame(Date = seq.POSIXt(from = start,
to = end,
by = "DSTday"))
# see ?strptime for details of formats you can extract
# day of the week as numeric (Monday is 1)
dat$weekday1 = as.numeric(format(dat$Date, format = "%u"))
# abbreviated weekday name
dat$weekday2 = format(dat$Date, format = "%a")
# full weekday name
dat$weekday3 = format(dat$Date, format = "%A")
dat
# returns
Date weekday1 weekday2 weekday3
1 2017-09-01 5 Fri Friday
2 2017-09-02 6 Sat Saturday
3 2017-09-03 7 Sun Sunday
4 2017-09-04 1 Mon Monday
5 2017-09-05 2 Tue Tuesday
6 2017-09-06 3 Wed Wednesday
formulaire de commentaire de JStrahl format(as.Date(df$date),"%w")
, nous obtenons le numéro du jour actuel: as.numeric(format(as.Date("2016-05-09"),"%w"))