En R, ¿cómo puedo asociar un vector de fechas (días) y semanas?¿Cómo puedo agrupar los días en semanas?
Editar: "semanas" debería ser el índice de la semana dentro del rango de fechas y no dentro del año. Mis disculpas por la ambigüedad.
En R, ¿cómo puedo asociar un vector de fechas (días) y semanas?¿Cómo puedo agrupar los días en semanas?
Editar: "semanas" debería ser el índice de la semana dentro del rango de fechas y no dentro del año. Mis disculpas por la ambigüedad.
¿Simplemente desea el número de intervalos de 7 días completados desde el primer registro?
dvec <- as.Date("2001-04-01")+0:90
dweek <- as.numeric(dvec-dvec[1]) %/% 7
dweek[1:21]
# [1] 0 0 0 0 0 0 0 1 1 1 1 1 1 1 2 2 2 2 2 2 2
+1 para la deducción –
@GavinSimpson: Yo "+() - edé" también, ya que fueron sus esfuerzos los que proporcionaron la base para la deducción. (Ahora obtengo una ventana emergente "Gavin Simpson" cuando escribo "@Gavin". Neat.) –
Y a usted le encanta la función de división entera '% /%' - Le daría otro +1 por eso si Podría: la respuesta es muy clara y concisa. –
strftime es su amigo ...
? strftime # to see the help and the format
set.seed(1)
dates <- Sys.Date() + sample(1:365, size = 10)
R> dates
[1] "2012-02-11" "2012-03-21" "2012-06-01" "2012-09-30"
[5] "2012-01-18" "2012-09-25" "2012-10-11" "2012-06-30"
[9] "2012-06-18" "2011-11-28"
# %j for julian day - number of the day since the 1st of january each year
R> strftime(dates, format = "%j") # or format(dates, format = "%j")
[1] "042" "081" "153" "274" "018" "269" "285" "182" "170" "332"
R> strftime(dates, format = "%w")
[1] "6" "3" "5" "0" "3" "2" "4" "6" "1" "1"
# my locale is in French so...
R> strftime(dates, format = "%A")
[1] "samedi" "mercredi" "vendredi" "dimanche" "mercredi"
[6] "mardi" "jeudi" "samedi" "lundi" "lundi"
Por cierto ¿qué es lo que entendemos por día, el día en el mes, la semana o el año?
Para cada fecha, obtenga la semana del año a la que pertenece formateándola a través de format()
utilizando los marcadores de posición de formato %U
de %W
. %U
trata el domingo como el primer día de la semana, mientras que %W
considera que el lunes es el primer día de la semana. He aquí un ejemplo:
now <- as.Date(Sys.time())
dates <- seq(now, now + 25, by = "1 day")
dat <- data.frame(Dates = dates, Week = format(dates, format = "%W"))
head(dat, 10)
cual da:
> head(dat, 10)
Dates Week
1 2011-11-06 44
2 2011-11-07 45
3 2011-11-08 45
4 2011-11-09 45
5 2011-11-10 45
6 2011-11-11 45
7 2011-11-12 45
8 2011-11-13 45
9 2011-11-14 46
10 2011-11-15 46
Aunque no está claro por su pregunta exactamente lo que quiere hacer, de manera que coincida con este vector de fechas (bueno, mi trama de datos dat
arriba) es a través de merge()
. Digamos que tenemos un vector de semanas que queremos hacer coincidir en contra y algunos datos relacionados en el marco de datos weekdat
:
weekdat <- data.frame(Week = 44:50, Price = c(10, 20, 25, 30, 20, 15, 10))
entonces podemos vincular dat
con weekdat
usando merge()
como tan:
> merge(dat, weekdat)
Week Dates Price
1 44 2011-11-06 10
2 45 2011-11-07 20
3 45 2011-11-08 20
4 45 2011-11-09 20
5 45 2011-11-10 20
6 45 2011-11-11 20
7 45 2011-11-12 20
8 45 2011-11-13 20
9 46 2011-11-14 25
10 46 2011-11-15 25
11 46 2011-11-16 25
12 46 2011-11-17 25
13 46 2011-11-18 25
14 46 2011-11-19 25
15 46 2011-11-20 25
16 47 2011-11-21 30
17 47 2011-11-22 30
18 47 2011-11-23 30
19 47 2011-11-24 30
20 47 2011-11-25 30
21 47 2011-11-26 30
22 47 2011-11-27 30
23 48 2011-11-28 20
24 48 2011-11-29 20
25 48 2011-11-30 20
26 48 2011-12-01 20
Hay otra formas de emparejar o vincular fechas a semanas, pero lo anterior debería darle algo para trabajar.
eche un vistazo al paquete 'lubridate' que hace que el manejo de' fechas' sea muy fácil. por ejemplo 'week (x)' devolvería el número de semana de la fecha x. – Ramnath
-1 Re la edición - Entonces, ¿cómo podemos saber cuál es tu índice de semana personal si no lo haces i) cuéntanos sobre él antes, y ii) ** mostrar ** tus datos o un fragmento de él? –
@ GavinSimpson- tienes razón. Debería haber sido más claro. – JohnRos