Encontre o dia de uma semana

Digamos que eu tenha uma data em R e esteja formatada da seguinte maneira.

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

Existe alguma maneira em R para adicionar outra coluna com o dia da semana associada à data? O dataset é muito grande, por isso não faria sentido passar manualmente e fazer as alterações.

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

Então, depois de adicionar os dias, ele ficaria parecido com:

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

Isso é possível? Alguém pode me indicar um pacote que me permita fazer isso? Apenas tentando gerar automaticamente o dia até a data.

 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: Só para mostrar outra maneira ...

O componente wday de um object POSIXlt é o dia da semana numérico (0-6 a partir de domingo).

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

que você poderia usar para subconjunto de um vetor de caracteres de nomes de dias da semana

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

Olhe para cima: ?strftime :

%A nome completo do dia da semana no local atual

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

Use o pacote de lubridate e 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 

Digamos que você também queira que a semana comece na segundafeira (em vez de padrão no domingo), então o seguinte é útil:

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

O resultado são os dias no intervalo [0, .., 6].

Se você quiser que o intervalo seja [1, .. 7], use o seguinte:

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

… ou alternativamente:

 df$day = df$day + 1 

Isso deve fazer o truque

 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 

formulário de comentário do format(as.Date(df$date),"%w") JStrahl format(as.Date(df$date),"%w") , obtemos o número do dia atual: 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