Discussion:
[R-es] problema de fechas
Patricio Suárez Gil
2018-02-12 22:57:34 UTC
Permalink
fechas <- c(“2016-07-15”, “2016-10-12”, ”2017-02-11”)
quiero que las fechas de 2017 (la tercera del vector del ejemplo) pasen a ser NA
fechas2 <- ifelse(fechas > “2016-12-31”, NA, fechas)
El problema que me encuentro es que el resultado (fechas2) es un vector numérico y no un vector de fechas. No encuentro la solución.

Se agradecen sugerencias.

Saludos,



Patricio














[[alternative HTML version deleted]]
Javier Marcuzzi
2018-02-12 23:08:40 UTC
Permalink
Estimado Patricio

Hay más de una forma para trabajar con fechas, y no es lo mismo dependiendo
el sistema, a mi me supo dar dolores de cabeza.

Le sugiero escribir nuevamente su pregunta pero colocando el formato de
fecha que usted usa y si estás utilizando una librería en particular, como
si los datos vienen desde una base de datos, algo que pueda inferir en la
fecha o es solo código R.

Javier Rubén Marcuzzi
Post by Patricio Suárez Gil
fechas <- c(“2016-07-15”, “2016-10-12”, ”2017-02-11”)
quiero que las fechas de 2017 (la tercera del vector del ejemplo) pasen a ser NA
fechas2 <- ifelse(fechas > “2016-12-31”, NA, fechas)
El problema que me encuentro es que el resultado (fechas2) es un vector
numérico y no un vector de fechas. No encuentro la solución.
Se agradecen sugerencias.
Saludos,
Patricio
[[alternative HTML version deleted]]
_______________________________________________
R-help-es mailing list
https://stat.ethz.ch/mailman/listinfo/r-help-es
[[alternative HTML version deleted]]
Patricio Suárez Gil
2018-02-12 23:12:14 UTC
Permalink
Las fechas están en formato “Date” del paquete “lubridate”, pero me encuentro el mismo problema usando fechas en formato POSIXct.

Saludos,


Patricio
Post by Javier Marcuzzi
Estimado Patricio
Hay más de una forma para trabajar con fechas, y no es lo mismo dependiendo el sistema, a mi me supo dar dolores de cabeza.
Le sugiero escribir nuevamente su pregunta pero colocando el formato de fecha que usted usa y si estás utilizando una librería en particular, como si los datos vienen desde una base de datos, algo que pueda inferir en la fecha o es solo código R.
Javier Rubén Marcuzzi
fechas <- c(“2016-07-15”, “2016-10-12”, ”2017-02-11”)
quiero que las fechas de 2017 (la tercera del vector del ejemplo) pasen a ser NA
fechas2 <- ifelse(fechas > “2016-12-31”, NA, fechas)
El problema que me encuentro es que el resultado (fechas2) es un vector numérico y no un vector de fechas. No encuentro la solución.
Se agradecen sugerencias.
Saludos,
Patricio
[[alternative HTML version deleted]]
_______________________________________________
R-help-es mailing list
https://stat.ethz.ch/mailman/listinfo/r-help-es <https://stat.ethz.ch/mailman/listinfo/r-help-es>
[[alternative HTML version deleted]]
Javier Marcuzzi
2018-02-12 23:16:52 UTC
Permalink
Patricio ahora estoy en el teléfono, pruebe striptime ( creo), y ver la
configuración del sistema e idioma.
Post by Patricio Suárez Gil
Las fechas están en formato “Date” del paquete “lubridate”, pero me
encuentro el mismo problema usando fechas en formato POSIXct.
Saludos,
Patricio
Estimado Patricio
Hay más de una forma para trabajar con fechas, y no es lo mismo
dependiendo el sistema, a mi me supo dar dolores de cabeza.
Le sugiero escribir nuevamente su pregunta pero colocando el formato de
fecha que usted usa y si estás utilizando una librería en particular, como
si los datos vienen desde una base de datos, algo que pueda inferir en la
fecha o es solo código R.
Javier Rubén Marcuzzi
Post by Patricio Suárez Gil
fechas <- c(“2016-07-15”, “2016-10-12”, ”2017-02-11”)
quiero que las fechas de 2017 (la tercera del vector del ejemplo) pasen a ser NA
fechas2 <- ifelse(fechas > “2016-12-31”, NA, fechas)
El problema que me encuentro es que el resultado (fechas2) es un vector
numérico y no un vector de fechas. No encuentro la solución.
Se agradecen sugerencias.
Saludos,
Patricio
[[alternative HTML version deleted]]
_______________________________________________
R-help-es mailing list
https://stat.ethz.ch/mailman/listinfo/r-help-es
[[alternative HTML version deleted]]
Patricio Suárez Gil
2018-02-12 23:19:27 UTC
Permalink
Ya he probado con ‘strptime’ que es la función básica de R para transformar cadenas de caracteres en fechas. esa función da lugar a una fecha de clase POSIXct ó POSIXlt, pero no soluciona el problema que he planteado.

Saludos
Patricio ahora estoy en el teléfono, pruebe striptime ( creo), y ver la configuración del sistema e idioma.
Las fechas están en formato “Date” del paquete “lubridate”, pero me encuentro el mismo problema usando fechas en formato POSIXct.
Saludos,
Patricio
Post by Javier Marcuzzi
Estimado Patricio
Hay más de una forma para trabajar con fechas, y no es lo mismo dependiendo el sistema, a mi me supo dar dolores de cabeza.
Le sugiero escribir nuevamente su pregunta pero colocando el formato de fecha que usted usa y si estás utilizando una librería en particular, como si los datos vienen desde una base de datos, algo que pueda inferir en la fecha o es solo código R.
Javier Rubén Marcuzzi
fechas <- c(“2016-07-15”, “2016-10-12”, ”2017-02-11”)
quiero que las fechas de 2017 (la tercera del vector del ejemplo) pasen a ser NA
fechas2 <- ifelse(fechas > “2016-12-31”, NA, fechas)
El problema que me encuentro es que el resultado (fechas2) es un vector numérico y no un vector de fechas. No encuentro la solución.
Se agradecen sugerencias.
Saludos,
Patricio
[[alternative HTML version deleted]]
_______________________________________________
R-help-es mailing list
https://stat.ethz.ch/mailman/listinfo/r-help-es <https://stat.ethz.ch/mailman/listinfo/r-help-es>
[[alternative HTML version deleted]]
Javier Marcuzzi
2018-02-12 23:23:11 UTC
Permalink
Pero puedes escribir ver el formato de datos
Post by Patricio Suárez Gil
Ya he probado con ‘strptime’ que es la función básica de R para
transformar cadenas de caracteres en fechas. esa función da lugar a una
fecha de clase POSIXct ó POSIXlt, pero no soluciona el problema que he
planteado.
Saludos
Patricio ahora estoy en el teléfono, pruebe striptime ( creo), y ver la
configuración del sistema e idioma.
Post by Patricio Suárez Gil
Las fechas están en formato “Date” del paquete “lubridate”, pero me
encuentro el mismo problema usando fechas en formato POSIXct.
Saludos,
Patricio
El 13 feb 2018, a las 0:08, Javier Marcuzzi <
Estimado Patricio
Hay más de una forma para trabajar con fechas, y no es lo mismo
dependiendo el sistema, a mi me supo dar dolores de cabeza.
Le sugiero escribir nuevamente su pregunta pero colocando el formato de
fecha que usted usa y si estás utilizando una librería en particular, como
si los datos vienen desde una base de datos, algo que pueda inferir en la
fecha o es solo código R.
Javier Rubén Marcuzzi
Post by Patricio Suárez Gil
fechas <- c(“2016-07-15”, “2016-10-12”, ”2017-02-11”)
quiero que las fechas de 2017 (la tercera del vector del ejemplo) pasen a ser NA
fechas2 <- ifelse(fechas > “2016-12-31”, NA, fechas)
El problema que me encuentro es que el resultado (fechas2) es un vector
numérico y no un vector de fechas. No encuentro la solución.
Se agradecen sugerencias.
Saludos,
Patricio
[[alternative HTML version deleted]]
_______________________________________________
R-help-es mailing list
https://stat.ethz.ch/mailman/listinfo/r-help-es
[[alternative HTML version deleted]]
Jesús Para Fernández
2018-02-12 23:24:46 UTC
Permalink
Primero tienes que convertir las fechas a formato fecha. Con as.Date, o con la funcion de ymd_hms de lubridate puedes hacerlo.

Una vez lo hayas hecho, podras filtrarlo asi.

Tb puedes probar a pasar el data.frame a data.table con la libreria data.table, y luego filtrar por datos[fecha>condicion,variable := 0], por ejemplo.

Un saludo
Jesús
________________________________
De: R-help-es <r-help-es-***@r-project.org> en nombre de Patricio Suárez Gil <***@gmail.com>
Enviado: lunes, 12 de febrero de 2018 23:57
Para: r-help-***@r-project.org
Asunto: [R-es] problema de fechas
fechas <- c(“2016-07-15”, “2016-10-12”, ”2017-02-11”)
quiero que las fechas de 2017 (la tercera del vector del ejemplo) pasen a ser NA
fechas2 <- ifelse(fechas > “2016-12-31”, NA, fechas)
El problema que me encuentro es que el resultado (fechas2) es un vector numérico y no un vector de fechas. No encuentro la solución.

Se agradecen sugerencias.

Saludos,



Patricio














[[alternative HTML version deleted]]

_______________________________________________
R-help-es mailing list
R-help-***@r-project.org
https://nam01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fstat.ethz.ch%2Fmailman%2Flistinfo%2Fr-help-es&data=02%7C01%7C%7Cc82ab30d66994a2ae59b08d5726c1d19%7C84df9e7fe9f640afb435aaaaaaaaaaaa%7C1%7C0%7C636540731044865905&sdata=kMcFrUQVz%2FBvvoQQtsG%2F1qWqaC5kSOR0nKY1YCKTjZM%3D&reserved=0

[[alternative HTML version deleted]]
Patricio Suárez Gil
2018-02-12 23:32:06 UTC
Permalink
El vector de fechas que he puesto ahí está creado con la función dmy de lubridate y, por tanto es una fecha de clase “Date”.

El problema no está ahi, sino en la transformación con ifelse que me genera un vector numérico en vez de un vector de fechas.

Saludos,


Patricio
Post by Jesús Para Fernández
Primero tienes que convertir las fechas a formato fecha. Con as.Date, o con la funcion de ymd_hms de lubridate puedes hacerlo.
Una vez lo hayas hecho, podras filtrarlo asi.
Tb puedes probar a pasar el data.frame a data.table con la libreria data.table, y luego filtrar por datos[fecha>condicion,variable := 0], por ejemplo.
Un saludo
Jesús
Enviado: lunes, 12 de febrero de 2018 23:57
Asunto: [R-es] problema de fechas
fechas <- c(“2016-07-15”, “2016-10-12”, ”2017-02-11”)
quiero que las fechas de 2017 (la tercera del vector del ejemplo) pasen a ser NA
fechas2 <- ifelse(fechas > “2016-12-31”, NA, fechas)
El problema que me encuentro es que el resultado (fechas2) es un vector numérico y no un vector de fechas. No encuentro la solución.
Se agradecen sugerencias.
Saludos,
Patricio
[[alternative HTML version deleted]]
_______________________________________________
R-help-es mailing list
https://nam01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fstat.ethz.ch%2Fmailman%2Flistinfo%2Fr-help-es&data=02%7C01%7C%7Cc82ab30d66994a2ae59b08d5726c1d19%7C84df9e7fe9f640afb435aaaaaaaaaaaa%7C1%7C0%7C636540731044865905&sdata=kMcFrUQVz%2FBvvoQQtsG%2F1qWqaC5kSOR0nKY1YCKTjZM%3D&reserved=0 <https://nam01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fstat.ethz.ch%2Fmailman%2Flistinfo%2Fr-help-es&data=02%7C01%7C%7Cc82ab30d66994a2ae59b08d5726c1d19%7C84df9e7fe9f640afb435aaaaaaaaaaaa%7C1%7C0%7C636540731044865905&sdata=kMcFrUQVz%2FBvvoQQtsG%2F1qWqaC5kSOR0nKY1YCKTjZM%3D&reserved=0>
[[alternative HTML version deleted]]
patricio fuenmayor
2018-02-12 23:54:01 UTC
Permalink
hola Patricio, usa:
dplyr::if_else

[[alternative HTML version deleted]]
Carlos Ortega
2018-02-13 00:04:26 UTC
Permalink
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
dplyr::if_else
[[alternative HTML version deleted]]
_______________________________________________
R-help-es mailing list
https://stat.ethz.ch/mailman/listinfo/r-help-es
--
Saludos,
Carlos Ortega
www.qualityexcellence.es

[[alternative HTML version deleted]]
Javier Marcuzzi
2018-02-13 04:18:19 UTC
Permalink
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
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
dplyr::if_else
[[alternative HTML version deleted]]
_______________________________________________
R-help-es mailing list
https://stat.ethz.ch/mailman/listinfo/r-help-es
--
Saludos,
Carlos Ortega
www.qualityexcellence.es
[[alternative HTML version deleted]]
_______________________________________________
R-help-es mailing list
https://stat.ethz.ch/mailman/listinfo/r-help-es
[[alternative HTML version deleted]]
Álvaro Hernández
2018-02-13 08:11:48 UTC
Permalink
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
Post by Carlos Ortega
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
dplyr::if_else
[[alternative HTML version deleted]]
_______________________________________________
R-help-es mailing list
https://stat.ethz.ch/mailman/listinfo/r-help-es
Carlos Ortega
2018-02-13 08:26:48 UTC
Permalink
Hola,

Sí, en el ejemplo de la ayuda de "ifelse" se advierte de este problema y
ofrece dos alternativas: una la que he propuesto y otra.
Con cualquiera de las dos el problema se resuelve.

## ifelse() strips attributes
## This is important when working with Dates and factors
x <- seq(as.Date("2000-02-29"), as.Date("2004-10-04"), by = "1 month")
## has many "yyyy-mm-29", but a few "yyyy-03-01" in the non-leap years
y <- ifelse(as.POSIXlt(x)$mday == 29, x, NA)
head(y) # not what you expected ... ==> need restore the class attribute:
class(y) <- class(x)
y
## ==> Again a case where it is better *not* to use ifelse(), but
## both more efficient and clear:
y2 <- x
y2[as.POSIXlt(x)$mday != 29] <- NA
stopifnot(identical(y2, y))

Saludos,
Carlos Ortega
www.qualityexcellence.es
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
fechas2 <- if_else(fechas > "2016-12-31", as_date(NA), fechas)
Un saludo
Álvaro
Hola,
Post by Carlos Ortega
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 <
dplyr::if_else
[[alternative HTML version deleted]]
_______________________________________________
R-help-es mailing list
https://stat.ethz.ch/mailman/listinfo/r-help-es
_______________________________________________
R-help-es mailing list
https://stat.ethz.ch/mailman/listinfo/r-help-es
--
Saludos,
Carlos Ortega
www.qualityexcellence.es

[[alternative HTML version deleted]]
Patricio Suárez Gil
2018-02-13 09:13:59 UTC
Permalink
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
***@sespa.es
ESPAÑA
Post by Carlos Ortega
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/>
dplyr::if_else
[[alternative HTML version deleted]]
_______________________________________________
R-help-es mailing list
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]]

Loading...