Finde den Tag einer Woche

Nehmen wir an, ich habe ein Datum in R und es ist wie folgt formatiert.

date 2012-02-01 2012-02-01 2012-02-02 

Gibt es eine Möglichkeit in R, eine weitere Spalte mit dem Wochentag hinzuzufügen, der dem Datum zugeordnet ist? Da der Datensatz sehr groß ist, ist es nicht sinnvoll, die Änderungen manuell durchzuführen.

 df = data.frame(date=c("2012-02-01", "2012-02-01", "2012-02-02")) 

Nach dem Hinzufügen der Tage würde es am Ende aussehen wie:

  date day 2012-02-01 Wednesday 2012-02-01 Wednesday 2012-02-02 Thursday 

Ist das möglich? Kann mir jemand ein Paket zeigen, das mir erlaubt, das zu tun? Ich versuche nur, den Tag automatisch nach dem Datum zu generieren.

   
 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: Nur um einen anderen Weg zu zeigen ...

Die wday Komponente eines POSIXlt Objekts ist der numerische Wochentag (0-6 beginnend am Sonntag).

 as.POSIXlt(df$date)$wday ## [1] 3 3 4 

mit dem Sie einen Zeichenvektor für Wochentagsnamen unterteilen können

 c("Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday")[as.POSIXlt(df$date)$wday + 1] ## [1] "Wednesday" "Wednesday" "Thursday" 

?strftime :

%A vollständiger Wochentagname im aktuellen Gebietsschema

 df$day = strftime(df$date,'%A') 

Verwenden Sie das lubridate Paket und die function 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 

Nehmen wir an, Sie möchten zusätzlich, dass die Woche am Montag beginnt (anstelle der Standardeinstellung am Sonntag), dann ist Folgendes hilfreich:

 require(lubridate) df$day = ifelse(wday(df$time)==1,6,wday(df$time)-2) 

Das Ergebnis sind die Tage im Intervall [0, .., 6].

Wenn das Intervall [1, .. 7] sein soll, verwenden Sie Folgendes:

 df$day = ifelse(wday(df$time)==1,7,wday(df$time)-1) 

… oder alternativ:

 df$day = df$day + 1 

Dies sollte den Trick machen

 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 

Formularkommentar des JStrahl- format(as.Date(df$date),"%w") , erhalten wir die Nummer des aktuellen Tages: as.numeric(format(as.Date("2016-05-09"),"%w"))

 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