hola Patricio, usa: dplyr::if_else [[alternative HTML version deleted]]
Hola, Esta es una forma...> library(lubridate) > library(dplyr) > > fechas <- c("2016-07-15", "2016-10-12", "2017-02-11") > fechas_new <- ymd(fechas) > > res_out <- ifelse(year(fechas_new) > 2016, NA, fechas_new) > res_out[1] 16997 17086 NA> class(res_out) <- class(fechas_new) > res_out[1] "2016-07-15" "2016-10-12" NA No lo había visto hasta ahora, es un caso que se cuenta en la ayuda de "ifelse()" con un ejemplo... Saludos, Carlos Ortega www.qualityexcellence.es 2018-02-13 0:54 GMT+01:00 patricio fuenmayor <patricio.fuenmayor en gmail.com>:> hola Patricio, usa: > dplyr::if_else > > [[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]]
Estimado Patricio Suárez Gil Ahora estoy en la computadora y puedo escribir un poco mejor, cuándo le sugiero conocer sobre el sistema y librería es porque los resultados difieren, y luego el striptime para ver el formato adecuado, porque lo que vemos como humanos no es equivalente en todos los casos con lo que ve la computadora. Copio y pego el código que usted envió, tal cuál informa mi computadora, que ni siquiera lo acepta sin cambiar las comillas, y luego str para ver el formato, finalmente en lubridate. Si en su caso str le informa fecha donde debe ser fecha, entonces puede concentrar la atención en el if, pero hay que tener cuidado en otra cosa antes de filtrar, el formato fecha, porque supongamos que sus datos son impuestos pagados del 1 al 10 de cada mes, un formato año, mes, día es igual al ojo humano que año, día, mes, numéricamente los datos entrarían, aunque usted propone un día 15 y no hay mes 15, el error es posible dependiendo del calendario de los datos, por decirlo de alguna forma y repitiendo, el ojo humano con las fechas no siempre coincide con el ojo informático.> R.version _platform x86_64-w64-mingw32 arch x86_64 os mingw32 system x86_64, mingw32 status major 3 minor 4.3 year 2017 month 11 day 30 svn rev 73796 language R version.string R version 3.4.3 (2017-11-30) nickname Kite-Eating Tree > fechas_original <- c(?2016-07-15?, ?2016-10-12?, ?2017-02-11?)Error: unexpected input in "fechas_original <- c(?"> fechas <- c('2016-07-15', '2016-10-12', '2017-02-11')> str(fechas) chr [1:3] "2016-07-15" "2016-10-12" "2017-02-11"> library(lubridate)> fecha2<-as_date(fechas)> str(fecha2) Date[1:3], format: "2016-07-15" "2016-10-12" "2017-02-11" Si no obtiene algo semejante a los dos últimos renglones, str(fecha2) y Date..., tiene un problema en la fuente de datos, y debe trabajar en estas antes que en el if. Javier Rubén Marcuzzi El 12 de febrero de 2018, 21:04, Carlos Ortega <cof en qualityexcellence.es> escribió:> Hola, > > Esta es una forma... > > > library(lubridate) > > library(dplyr) > > > > fechas <- c("2016-07-15", "2016-10-12", "2017-02-11") > > fechas_new <- ymd(fechas) > > > > res_out <- ifelse(year(fechas_new) > 2016, NA, fechas_new) > > res_out > [1] 16997 17086 NA > > class(res_out) <- class(fechas_new) > > res_out > [1] "2016-07-15" "2016-10-12" NA > > > No lo había visto hasta ahora, es un caso que se cuenta en la ayuda de > "ifelse()" con un ejemplo... > > Saludos, > Carlos Ortega > www.qualityexcellence.es > > > 2018-02-13 0:54 GMT+01:00 patricio fuenmayor <patricio.fuenmayor en gmail.com > >: > > > hola Patricio, usa: > > dplyr::if_else > > > > [[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]]
Yo entiendo que lo que quiere es saber cómo hacer el 'ifelse' para que no le devuelva un vector numérico porque para transformarlo podría hacer simplemente 'as_date(fechas2)'. El problema yo creo que es por tema coerción con el 'NA' (sumado al comportamiento de 'ifelse'). Estaba buscando alternativas como NA_character_, NA_numeric_, etc. pero no encuentro para fecha, así que, se podría hacer algo como: fechas2 <- if_else(fechas > "2016-12-31", as_date(NA), fechas) Un saludo Álvaro El 13/02/18 a las 01:04, Carlos Ortega escribió:> Hola, > > Esta es una forma... > >> library(lubridate) >> library(dplyr) >> >> fechas <- c("2016-07-15", "2016-10-12", "2017-02-11") >> fechas_new <- ymd(fechas) >> >> res_out <- ifelse(year(fechas_new) > 2016, NA, fechas_new) >> res_out > [1] 16997 17086 NA >> class(res_out) <- class(fechas_new) >> res_out > [1] "2016-07-15" "2016-10-12" NA > > > No lo había visto hasta ahora, es un caso que se cuenta en la ayuda de > "ifelse()" con un ejemplo... > > Saludos, > Carlos Ortega > www.qualityexcellence.es > > > 2018-02-13 0:54 GMT+01:00 patricio fuenmayor <patricio.fuenmayor en gmail.com>: > >> hola Patricio, usa: >> dplyr::if_else >> >> [[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 >> > >
Muchas gracias a todos por vuestra ayuda. La solución que propone Carlos Ortega me funciona perfectamente. Gracias mil, Carlos. Patricio Suárez Gil Unidad de Investigación Área V-Gijón Planta 5ª Impar Hospital Universitario de Cabueñes C/Prado, 395 33394 Gijón (Asturias) Tfno: 985 185 000 (Ext. 85715) @uinvest_psg unidadinvestigacion.area5 en sespa.es ESPAÑA> El 13 feb 2018, a las 1:04, Carlos Ortega <cof en qualityexcellence.es> escribió: > > Hola, > > Esta es una forma... > > > library(lubridate) > > library(dplyr) > > > > fechas <- c("2016-07-15", "2016-10-12", "2017-02-11") > > fechas_new <- ymd(fechas) > > > > res_out <- ifelse(year(fechas_new) > 2016, NA, fechas_new) > > res_out > [1] 16997 17086 NA > > class(res_out) <- class(fechas_new) > > res_out > [1] "2016-07-15" "2016-10-12" NA > > > No lo había visto hasta ahora, es un caso que se cuenta en la ayuda de "ifelse()" con un ejemplo... > > Saludos, > Carlos Ortega > www.qualityexcellence.es <http://www.qualityexcellence.es/> > > > 2018-02-13 0:54 GMT+01:00 patricio fuenmayor <patricio.fuenmayor en gmail.com <mailto:patricio.fuenmayor en gmail.com>>: > hola Patricio, usa: > dplyr::if_else > > [[alternative HTML version deleted]] > > _______________________________________________ > R-help-es mailing list > R-help-es en r-project.org <mailto:R-help-es en r-project.org> > https://stat.ethz.ch/mailman/listinfo/r-help-es <https://stat.ethz.ch/mailman/listinfo/r-help-es> > > > > -- > Saludos, > Carlos Ortega > www.qualityexcellence.es <http://www.qualityexcellence.es/>[[alternative HTML version deleted]]