studio mtext change r r-faq

mtext - r plot legend



Encuentra el día de una semana (7)

Digamos que tengo una fecha en R y está formateada de la siguiente manera.

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

¿Hay alguna manera en R de agregar otra columna con el día de la semana asociado con la fecha? El conjunto de datos es realmente grande, por lo que no tendría sentido pasar manualmente y realizar los cambios.

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

Entonces, después de agregar los días, terminaría luciendo como:

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

es posible? ¿Alguien puede indicarme un paquete que me permita hacer esto? Solo trato de generar automáticamente el día por fecha.


Esto debería funcionar

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


Mira hacia arriba ?strftime :

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


Supongamos que también desea que la semana comience el lunes (en lugar de la predeterminada el domingo), entonces lo siguiente es útil:

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

El resultado es los días en el intervalo [0, .., 6].

Si desea que el intervalo sea [1, .. 7], use lo siguiente:

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

... o alternativamente:

df$day = df$day + 1


Use el paquete lubridate y la función 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


formulario de comentario del format(as.Date(df$date),"%w") JStrahl format(as.Date(df$date),"%w") , obtenemos el número del día actual: as.numeric(format(as.Date("2016-05-09"),"%w"))


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

Editar: Solo para mostrar otra forma ...

El componente wday de un objeto POSIXlt es el día de la semana numérico (0-6 que comienza el domingo).

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

que podría usar para subconjuntar un vector de caracteres de los nombres de los días de la semana

c("Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday")[as.POSIXlt(df$date)$wday + 1] ## [1] "Wednesday" "Wednesday" "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