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