Hola a todos. Estoy tratando de asignar el número de semana del año a una serie de fechas y me encuentro con que el paquete lubridate considera como día de inicio de la semana el domingo en lugar del lunes. Lo que se me ha ocurrido es crear una tabla auxiliar de fechas con los campos: 'Fecha desde', 'Fecha hasta' y 'Semana ISO' tal que así: 'Fecha desde', 'Fecha hasta', 'Semana ISO' 28/12/2015, 03/01/2016, 53 04/01/2016, 10/01/2016, 1 11/01/2016, 17/01/2016, 2 18/01/2016, 24/01/2016, 3 Pero lo que es muy fácil con Excel (=buscarv(fecha;tabla;3;1)), con R no sé como hacerlo. ¿Alguna idea, sugerencia o forma alternativa de encarar el problema? Gracias por vuestra ayuda. Rubén [[alternative HTML version deleted]]
Estimado Rubén Coca El primer día de la semana es el domingo, si quieres ir en contra del calendario puedes realizarlo, si el día es 1 es domingo, suma 1 y daría lunes, pero si el mes termina en domingo tienes un error, por lo que deberías contar el mes, y si el año es bisiesto también deberías contemplarlo. ¿Vale la pena tanto trabajo para no tener el domingo como primer día de la semana? Yo usaría el domingo como casi todo el mundo y me concentraría en otros problemas. Aunque hay algoritmos que permiten realizar lo que usted desea, lo vi escrito, pero lo descarte de mi mente y no recuerdo donde estaba. Puede encontrarlos esos algoritmos, no creo que valga la pena que escriba todo desde cero. Javier Rubén Marcuzzi De: Rubén Coca Enviado: lunes, 9 de enero de 2017 18:52 Para: r-help-es en r-project.org Asunto: [R-es] Asignar número de semana Hola a todos. Estoy tratando de asignar el número de semana del año a una serie de fechas y me encuentro con que el paquete lubridate considera como día de inicio de la semana el domingo en lugar del lunes. Lo que se me ha ocurrido es crear una tabla auxiliar de fechas con los campos: 'Fecha desde', 'Fecha hasta' y 'Semana ISO' tal que así: 'Fecha desde', 'Fecha hasta', 'Semana ISO' 28/12/2015, 03/01/2016, 53 04/01/2016, 10/01/2016, 1 11/01/2016, 17/01/2016, 2 18/01/2016, 24/01/2016, 3 Pero lo que es muy fácil con Excel (=buscarv(fecha;tabla;3;1)), con R no sé como hacerlo. ¿Alguna idea, sugerencia o forma alternativa de encarar el problema? Gracias por vuestra ayuda. Rubén [[alternative HTML version deleted]] _______________________________________________ R-help-es mailing list R-help-es en r-project.org https://stat.ethz.ch/mailman/listinfo/r-help-es [[alternative HTML version deleted]]
Hola, Mira esto, que viene el código que puedes ajustar para considerar el comienzo de la semana el día que quieras. En el ejemplo consideran el miércoles... http://stackoverflow.com/questions/34617056/r-week-number-from-date-starting-on-a-friday Saludos, Carlos Ortega www.qualityexcellence.es El 9 de enero de 2017, 22:51, Rubén Coca <ruben.coca en gmail.com> escribió:> Hola a todos. > Estoy tratando de asignar el número de semana del año a una serie de fechas > y me encuentro con que el paquete lubridate considera como día de inicio de > la semana el domingo en lugar del lunes. > Lo que se me ha ocurrido es crear una tabla auxiliar de fechas con los > campos: 'Fecha desde', 'Fecha hasta' y 'Semana ISO' tal que así: > 'Fecha desde', 'Fecha hasta', 'Semana ISO' > 28/12/2015, 03/01/2016, 53 > 04/01/2016, 10/01/2016, 1 > 11/01/2016, 17/01/2016, 2 > 18/01/2016, 24/01/2016, 3 > Pero lo que es muy fácil con Excel (=buscarv(fecha;tabla;3;1)), con R no sé > como hacerlo. > > ¿Alguna idea, sugerencia o forma alternativa de encarar el problema? > > Gracias por vuestra ayuda. > Rubén > > [[alternative HTML version deleted]] > > _______________________________________________ > R-help-es mailing list > R-help-es en r-project.org > https://stat.ethz.ch/mailman/listinfo/r-help-es >-- Saludos, Carlos Ortega www.qualityexcellence.es [[alternative HTML version deleted]]
Perdón, me confundí, a usted no le interesa el mes, solo el día, y desde este
conocer en que semana del año está.
Pero sin embargo hay algo que no me cierra.
Por ejemplo del aporte de Carlos Ortega para inicializar coloca
isWed <- dmy(paste("0", as.character(i), "/01/",
year(formattedDate), sep = ""))
¿coloca el día 0/01/2017? Si tenemos en cuenta este año.
Posiblemente funcione, pero libridate inicia la semana el domingo, ¿Cómo hace
para la primer semana del año? Porque no todos los años comienzan el domingo, o
desde la otra punta, el 31 de diciembre es domingo, se inicia la última semana
del año, y el día lunes es el primero, de en ese caso es la primer semana del
año nuevo (no inicia el domingo, habría dos inicios de semana en días
consecutivos), y como está en el algoritmo, esta parte no me cierra del todo
firstWed <- day(isWed)
if (firstWed > 1) {
firstWeek <- 2
}
else {
firstWeek <- 1
}
¿Da correcto o hay un problema? Habría que probarlo, yo no estoy seguro.
Javier Rubén Marcuzzi
De: Carlos Ortega
Enviado: lunes, 9 de enero de 2017 19:18
Para: Rubén Coca
CC: Lista R
Asunto: Re: [R-es] Asignar número de semana
Hola,
Mira esto, que viene el código que puedes ajustar para considerar el
comienzo de la semana el día que quieras. En el ejemplo consideran el
miércoles...
http://stackoverflow.com/questions/34617056/r-week-number-from-date-starting-on-a-friday
Saludos,
Carlos Ortega
www.qualityexcellence.es
El 9 de enero de 2017, 22:51, Rubén Coca <ruben.coca en gmail.com>
escribió:
> Hola a todos.
> Estoy tratando de asignar el número de semana del año a una serie de fechas
> y me encuentro con que el paquete lubridate considera como día de inicio de
> la semana el domingo en lugar del lunes.
> Lo que se me ha ocurrido es crear una tabla auxiliar de fechas con los
> campos: 'Fecha desde', 'Fecha hasta' y 'Semana ISO'
tal que así:
> 'Fecha desde', 'Fecha hasta', 'Semana ISO'
> 28/12/2015, 03/01/2016, 53
> 04/01/2016, 10/01/2016, 1
> 11/01/2016, 17/01/2016, 2
> 18/01/2016, 24/01/2016, 3
> Pero lo que es muy fácil con Excel (=buscarv(fecha;tabla;3;1)), con R no sé
> como hacerlo.
>
> ¿Alguna idea, sugerencia o forma alternativa de encarar el problema?
>
> Gracias por vuestra ayuda.
> Rubén
>
> [[alternative HTML version deleted]]
>
> _______________________________________________
> R-help-es mailing list
> R-help-es en r-project.org
> https://stat.ethz.ch/mailman/listinfo/r-help-es
>
--
Saludos,
Carlos Ortega
www.qualityexcellence.es
[[alternative HTML version deleted]]
_______________________________________________
R-help-es mailing list
R-help-es en r-project.org
https://stat.ethz.ch/mailman/listinfo/r-help-es
[[alternative HTML version deleted]]
miguel.angel.rodriguez.muinos en sergas.es
2017-Jan-10 08:04 UTC
[R-es] Asignar número de semana
Hola Rubén.
El tema de trabajar con fechas no es nada trivial y tiene su importancia.
Cuándo empieza una semana y/o cuál es la primera semana del año (por
ejemplo) son aspectos que hay que tener bien definidos a la hora de
trabajar con fechas.
Te recomiendo que le eches un ojo a la norma ISO 8601, que arroja
bastante luz sobre este asunto.
https://es.wikipedia.org/wiki/ISO_8601
http://www.iso.org/iso/home/store/catalogue_tc/catalogue_detail.htm?csnumber=40874
En R hay bastante material al respecto (por darte una referencia, el
paquete ISOweek y similares).
Desde mi punto de vista, el quiz de la cuestión esta en la función
as.Date() y el parámetro "format". Yo empezaría por ahí.
Por ponerte un ejemplo concreto, te comentaré como he resuelto el
cálculo de la semana epidemiológica:
Para no liarte con definiciones simplemente has de saber que, en la
práctica, la primera semana epidemiológica de un año es aquella que
contiene el primer jueves de ese año. Partiendo de esa premisa es
sencillo realizar una función que calcule el número de la semana
epidemiológica de una fecha dada
# Cálculo de la semana Epidemiológica (semepi)
fecha=as.Date(datos.$fecha,format="%d/%m/%Y")
diafecha=as.numeric(format(fecha,format="%w"))
diferencia=4-diafecha
Jueves=fecha+diferencia
if (diferencia<4)
{
semepi=ceiling(as.numeric(format(Jueves,format="%j"))/7)
} else
semepi=ceiling(as.numeric(format(Jueves,format="%j"))/7)-1
if (semepi==0)
semepi=ceiling(as.numeric(format(Jueves-7,format="%j"))/7)
semepi
# FIN
Si modificas esto según tus necesidades, puedes calcular la semana en
función del día que te interese que creo que es tu caso.
Un saludo,
--
Miguel Ángel Rodríguez Muíños
Asesoramento en Informática
Dirección Xeral de Saúde Pública
Consellería de Sanidade
Xunta de Galicia
http://dxsp.sergas.es
El 09/01/2017 a las 22:51, Rubén Coca escribió:> Hola a todos.
> Estoy tratando de asignar el número de semana del año a una serie de fechas
> y me encuentro con que el paquete lubridate considera como día de inicio de
> la semana el domingo en lugar del lunes.
> Lo que se me ha ocurrido es crear una tabla auxiliar de fechas con los
> campos: 'Fecha desde', 'Fecha hasta' y 'Semana ISO'
tal que así:
> 'Fecha desde', 'Fecha hasta', 'Semana ISO'
> 28/12/2015, 03/01/2016, 53
> 04/01/2016, 10/01/2016, 1
> 11/01/2016, 17/01/2016, 2
> 18/01/2016, 24/01/2016, 3
> Pero lo que es muy fácil con Excel (=buscarv(fecha;tabla;3;1)), con R no sé
> como hacerlo.
>
> ¿Alguna idea, sugerencia o forma alternativa de encarar el problema?
>
> Gracias por vuestra ayuda.
> Rubén
>
> [[alternative HTML version deleted]]
>
> _______________________________________________
> R-help-es mailing list
> R-help-es en r-project.org
> https://stat.ethz.ch/mailman/listinfo/r-help-es
________________________________
Nota: A información contida nesta mensaxe e os seus posibles documentos adxuntos
é privada e confidencial e está dirixida únicamente ó seu destinatario/a. Se
vostede non é o/a destinatario/a orixinal desta mensaxe, por favor elimínea. A
distribución ou copia desta mensaxe non está autorizada.
Nota: La información contenida en este mensaje y sus posibles documentos
adjuntos es privada y confidencial y está dirigida únicamente a su
destinatario/a. Si usted no es el/la destinatario/a original de este mensaje,
por favor elimínelo. La distribución o copia de este mensaje no está autorizada.
See more languages: http://www.sergas.es/aviso-confidencialidad