Muchas gracias, Probaré eso también y ya os cuento. Jaume. El lun., 17 feb. 2020 a las 22:10, Javier Marcuzzi (< javier.ruben.marcuzzi en gmail.com>) escribió:> Estimado Jaume Tormo > > En lo personal yo utilizo un enfoque como el que comenta Carlos Ortega, se > me ocurre que posiblemente funcione si a su código le coloca algo de > formato, me refiero a esta forma: > > as.Date("10/21/2012", format = "%m/%d/%Y") > > Javier Rubén Marcuzzi > > El lun., 17 feb. 2020 a las 17:55, Jaume Tormo (<jautorbla en gmail.com>) > escribió: > >> Carlos, muchas gracias, voy a probarlo. >> Pero me sigue intrigando por que no puedo ponerlo como elemento de un >> vector... Misterios del R. SI lo averiguo os lo digo. >> >> Jaume. >> >> El sáb., 15 feb. 2020 a las 19:08, Carlos Ortega (< >> cof en qualityexcellence.es>) >> escribió: >> >> > Hola, >> > >> > Una alternativa que te puede ayudar es enfocar el problema de esta otra >> > forma. >> > Puedes ir guardando tus vectores "original" en un data.frame y luego >> > convertirlo a fechas. >> > >> > Una vez tienes estas fechas, puedes hacer cálculos o extraer otras >> > variables. >> > >> > >> > > original<-c(2019,308,1700, 25) >> > > df <- data.frame( >> > + Year = original[1], >> > + DayNum = original[2], >> > + Hour = original[3] >> > + ) >> > > my_fecha <- strptime( paste(df$Year, df$DayNum, df$Hour, sep = ""), >> > "%Y%j%H" ) >> > > my_fecha >> > [1] "2019-11-04 17:00:00 CET" >> > > my_fecha <- strptime( paste(original[1], original[2], original[3], >> sep >> > ""), "%Y%j%H" ) >> > > my_fecha >> > [1] "2019-11-04 17:00:00 CET" >> > >> > Gracias, >> > Carlos Ortega >> > www.qualityexcellence.es >> > >> > >> > El sáb., 15 feb. 2020 a las 12:45, Jaume Tormo (<jautorbla en gmail.com>) >> > escribió: >> > >> >> Hola, >> >> >> >> Estoy encontrando un problema al intentar poner un objeto Dates en un >> >> vector o dataframe. >> >> Mi ejemplo >> >> # preliminares >> >> install.packages( lubridate ); library( lubridate ) >> >> v <- c(0, 0, 0) >> >> original<-c(2019,308,1700, 25) # c(año, día del año, hora, >> temperatura) >> >> esto sale así de un sensor de temperatura >> >> >> >> # convertimos los datos originales en algo que entienda R >> >> a <- years(original[1] ) >> >> d <- days(original[2]-1 ) # el -1 es un ajuste por como son los datos >> >> originales >> >> h <- hours( substr(original[3], 1, 2) ) >> >> fecha <- a+d+h # Conseguimos una fecha completa >> >> fecha.b <- as.Date(fecha, origin="0000-01-01" ) # convertimos la >> fecha >> >> en >> >> días del mes en lugar de días del año >> >> # mi problema >> >> # Si asigno fecha a un elemento de un vector me sale 0 >> >> v[2] <- fecha >> >> v[2] >> >> # Si asigno fecha.b a un elemento de un vector me da un error >> >> v[1] <- fecha.b >> >> Me da cosas parecidas si intento asignar un lugar en un dataframe, >> >> >> >> Entiendo que as.Date convierte la fecha en algo que tiene más de un >> >> elemento ¿Puede ser eso? Si es así ¿Cómo veo lo que hay dentro del >> objeto >> >> para sacar solo lo que me interese? >> >> >> >> Muchas gracias. >> >> >> >> -- >> >> Jaume Tormo. >> >> https://es.linkedin.com/in/jaumetormo >> >> https://acercad.wordpress.com/ >> >> >> >> [[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 >> > >> >> >> -- >> Jaume Tormo. >> https://es.linkedin.com/in/jaumetormo >> https://acercad.wordpress.com/ >> >> [[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 >> >-- Jaume Tormo. https://es.linkedin.com/in/jaumetormo https://acercad.wordpress.com/ [[alternative HTML version deleted]]
Álvaro Hernández Vicente
2020-Feb-25 10:00 UTC
[R-es] Colocar objeto Dates dentro de un vector.
Hola, Jaume: El problema que tienes en tu enfoque y por lo que R no te deja añadir esa fecha al vector es que no es un valor lo que intentas sustituir. Tu 'fecha' lo que contiene es un objeto 'Period' de lubridate y 'fecha.b' verás que es de tipo POSIXlt, que viene a ser internamente como una lista (mira ?DateTimeClasses). Puedes comprobarlo con: str(fecha) class(fecha.b) Si quieres mantener tu enfoque (que muchas veces es lo que uno mejor entiende) podrías guardar tu fecha como una cadena (tu vector cambiará a tipo character) o guardarlo tal cual en el vector (que se te convertirá a numérico, como se guardan las fechas, desde 1970-01-01). string <- paste0(original[1:3], collapse = "-") fecha <- parse_date_time(string, orders = "%y-%j-%H%M") # opción 1 v <- c(0, 0, 0) v[1] <- as.character(fecha) as_datetime(v) # opción 2 v <- c(0, 0, 0) v[1] <- fecha as_datetime(v) Un saludo Álvaro El 24/2/20 a las 21:54, Jaume Tormo escribió:> Muchas gracias, > > Probaré eso también y ya os cuento. > > Jaume. > > El lun., 17 feb. 2020 a las 22:10, Javier Marcuzzi (< > javier.ruben.marcuzzi en gmail.com>) escribió: > >> Estimado Jaume Tormo >> >> En lo personal yo utilizo un enfoque como el que comenta Carlos Ortega, se >> me ocurre que posiblemente funcione si a su código le coloca algo de >> formato, me refiero a esta forma: >> >> as.Date("10/21/2012", format = "%m/%d/%Y") >> >> Javier Rubén Marcuzzi >> >> El lun., 17 feb. 2020 a las 17:55, Jaume Tormo (<jautorbla en gmail.com>) >> escribió: >> >>> Carlos, muchas gracias, voy a probarlo. >>> Pero me sigue intrigando por que no puedo ponerlo como elemento de un >>> vector... Misterios del R. SI lo averiguo os lo digo. >>> >>> Jaume. >>> >>> El sáb., 15 feb. 2020 a las 19:08, Carlos Ortega (< >>> cof en qualityexcellence.es>) >>> escribió: >>> >>>> Hola, >>>> >>>> Una alternativa que te puede ayudar es enfocar el problema de esta otra >>>> forma. >>>> Puedes ir guardando tus vectores "original" en un data.frame y luego >>>> convertirlo a fechas. >>>> >>>> Una vez tienes estas fechas, puedes hacer cálculos o extraer otras >>>> variables. >>>> >>>> >>>>> original<-c(2019,308,1700, 25) >>>>> df <- data.frame( >>>> + Year = original[1], >>>> + DayNum = original[2], >>>> + Hour = original[3] >>>> + ) >>>>> my_fecha <- strptime( paste(df$Year, df$DayNum, df$Hour, sep = ""), >>>> "%Y%j%H" ) >>>>> my_fecha >>>> [1] "2019-11-04 17:00:00 CET" >>>>> my_fecha <- strptime( paste(original[1], original[2], original[3], >>> sep >>>> ""), "%Y%j%H" ) >>>>> my_fecha >>>> [1] "2019-11-04 17:00:00 CET" >>>> >>>> Gracias, >>>> Carlos Ortega >>>> www.qualityexcellence.es >>>> >>>> >>>> El sáb., 15 feb. 2020 a las 12:45, Jaume Tormo (<jautorbla en gmail.com>) >>>> escribió: >>>> >>>>> Hola, >>>>> >>>>> Estoy encontrando un problema al intentar poner un objeto Dates en un >>>>> vector o dataframe. >>>>> Mi ejemplo >>>>> # preliminares >>>>> install.packages( lubridate ); library( lubridate ) >>>>> v <- c(0, 0, 0) >>>>> original<-c(2019,308,1700, 25) # c(año, día del año, hora, >>> temperatura) >>>>> esto sale así de un sensor de temperatura >>>>> >>>>> # convertimos los datos originales en algo que entienda R >>>>> a <- years(original[1] ) >>>>> d <- days(original[2]-1 ) # el -1 es un ajuste por como son los datos >>>>> originales >>>>> h <- hours( substr(original[3], 1, 2) ) >>>>> fecha <- a+d+h # Conseguimos una fecha completa >>>>> fecha.b <- as.Date(fecha, origin="0000-01-01" ) # convertimos la >>> fecha >>>>> en >>>>> días del mes en lugar de días del año >>>>> # mi problema >>>>> # Si asigno fecha a un elemento de un vector me sale 0 >>>>> v[2] <- fecha >>>>> v[2] >>>>> # Si asigno fecha.b a un elemento de un vector me da un error >>>>> v[1] <- fecha.b >>>>> Me da cosas parecidas si intento asignar un lugar en un dataframe, >>>>> >>>>> Entiendo que as.Date convierte la fecha en algo que tiene más de un >>>>> elemento ¿Puede ser eso? Si es así ¿Cómo veo lo que hay dentro del >>> objeto >>>>> para sacar solo lo que me interese? >>>>> >>>>> Muchas gracias. >>>>> >>>>> -- >>>>> Jaume Tormo. >>>>> https://es.linkedin.com/in/jaumetormo >>>>> https://acercad.wordpress.com/ >>>>> >>>>> [[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 >>>> >>> >>> -- >>> Jaume Tormo. >>> https://es.linkedin.com/in/jaumetormo >>> https://acercad.wordpress.com/ >>> >>> [[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 a todos, Álvaro, has dado en el clavo, eso es lo que pasaba. Me imagino que no hay manera de meter una lista dentro de un vector. Al final he usado tu sugerencia. Y me queda así: # preliminares install.packages( lubridate ); library( lubridate ) v <- c(0, 0, 0) original <- c(2019, 308, 1700, 25) # c(año, día del año, hora, temperatura) esto sale así de un sensor de temperatura # convertimos los datos originales en algo que entienda R a <- years(original[1] ) d <- days(original[2]-1 ) # el -1 es un ajuste por como son los datos originales h <- hours( substr(original[3], 1, 2) ) fecha <- a+d+h # Conseguimos una fecha completa fecha.b <- as.Date(fecha, origin="0000-01-01" ) # convertimos la fecha en días del mes en lugar de días del año fecha.c <- as.character(fecha.b) # Ahora sí que funciona v[3] <- fecha.c v [1] "0" "0" "2019-11-04 17:00:00" Muchas gracias a todos. Jaume. El mar., 25 feb. 2020 a las 11:01, Álvaro Hernández Vicente (<alvarohv en um.es>) escribió:> Hola, Jaume: > > El problema que tienes en tu enfoque y por lo que R no te deja añadir > esa fecha al vector es que no es un valor lo que intentas sustituir. Tu > 'fecha' lo que contiene es un objeto 'Period' de lubridate y 'fecha.b' > verás que es de tipo POSIXlt, que viene a ser internamente como una > lista (mira ?DateTimeClasses). Puedes comprobarlo con: > > str(fecha) > class(fecha.b) > > Si quieres mantener tu enfoque (que muchas veces es lo que uno mejor > entiende) podrías guardar tu fecha como una cadena (tu vector cambiará a > tipo character) o guardarlo tal cual en el vector (que se te convertirá > a numérico, como se guardan las fechas, desde 1970-01-01). > > string <- paste0(original[1:3], collapse = "-") > fecha <- parse_date_time(string, orders = "%y-%j-%H%M") > > # opción 1 > v <- c(0, 0, 0) > v[1] <- as.character(fecha) > as_datetime(v) > > # opción 2 > v <- c(0, 0, 0) > v[1] <- fecha > as_datetime(v) > > Un saludo > Álvaro > > El 24/2/20 a las 21:54, Jaume Tormo escribió: > > Muchas gracias, > > > > Probaré eso también y ya os cuento. > > > > Jaume. > > > > El lun., 17 feb. 2020 a las 22:10, Javier Marcuzzi (< > > javier.ruben.marcuzzi en gmail.com>) escribió: > > > >> Estimado Jaume Tormo > >> > >> En lo personal yo utilizo un enfoque como el que comenta Carlos Ortega, > se > >> me ocurre que posiblemente funcione si a su código le coloca algo de > >> formato, me refiero a esta forma: > >> > >> as.Date("10/21/2012", format = "%m/%d/%Y") > >> > >> Javier Rubén Marcuzzi > >> > >> El lun., 17 feb. 2020 a las 17:55, Jaume Tormo (<jautorbla en gmail.com>) > >> escribió: > >> > >>> Carlos, muchas gracias, voy a probarlo. > >>> Pero me sigue intrigando por que no puedo ponerlo como elemento de un > >>> vector... Misterios del R. SI lo averiguo os lo digo. > >>> > >>> Jaume. > >>> > >>> El sáb., 15 feb. 2020 a las 19:08, Carlos Ortega (< > >>> cof en qualityexcellence.es>) > >>> escribió: > >>> > >>>> Hola, > >>>> > >>>> Una alternativa que te puede ayudar es enfocar el problema de esta > otra > >>>> forma. > >>>> Puedes ir guardando tus vectores "original" en un data.frame y luego > >>>> convertirlo a fechas. > >>>> > >>>> Una vez tienes estas fechas, puedes hacer cálculos o extraer otras > >>>> variables. > >>>> > >>>> > >>>>> original<-c(2019,308,1700, 25) > >>>>> df <- data.frame( > >>>> + Year = original[1], > >>>> + DayNum = original[2], > >>>> + Hour = original[3] > >>>> + ) > >>>>> my_fecha <- strptime( paste(df$Year, df$DayNum, df$Hour, sep = ""), > >>>> "%Y%j%H" ) > >>>>> my_fecha > >>>> [1] "2019-11-04 17:00:00 CET" > >>>>> my_fecha <- strptime( paste(original[1], original[2], original[3], > >>> sep > >>>> ""), "%Y%j%H" ) > >>>>> my_fecha > >>>> [1] "2019-11-04 17:00:00 CET" > >>>> > >>>> Gracias, > >>>> Carlos Ortega > >>>> www.qualityexcellence.es > >>>> > >>>> > >>>> El sáb., 15 feb. 2020 a las 12:45, Jaume Tormo (<jautorbla en gmail.com > >) > >>>> escribió: > >>>> > >>>>> Hola, > >>>>> > >>>>> Estoy encontrando un problema al intentar poner un objeto Dates en un > >>>>> vector o dataframe. > >>>>> Mi ejemplo > >>>>> # preliminares > >>>>> install.packages( lubridate ); library( lubridate ) > >>>>> v <- c(0, 0, 0) > >>>>> original<-c(2019,308,1700, 25) # c(año, día del año, hora, > >>> temperatura) > >>>>> esto sale así de un sensor de temperatura > >>>>> > >>>>> # convertimos los datos originales en algo que entienda R > >>>>> a <- years(original[1] ) > >>>>> d <- days(original[2]-1 ) # el -1 es un ajuste por como son los > datos > >>>>> originales > >>>>> h <- hours( substr(original[3], 1, 2) ) > >>>>> fecha <- a+d+h # Conseguimos una fecha completa > >>>>> fecha.b <- as.Date(fecha, origin="0000-01-01" ) # convertimos la > >>> fecha > >>>>> en > >>>>> días del mes en lugar de días del año > >>>>> # mi problema > >>>>> # Si asigno fecha a un elemento de un vector me sale 0 > >>>>> v[2] <- fecha > >>>>> v[2] > >>>>> # Si asigno fecha.b a un elemento de un vector me da un error > >>>>> v[1] <- fecha.b > >>>>> Me da cosas parecidas si intento asignar un lugar en un dataframe, > >>>>> > >>>>> Entiendo que as.Date convierte la fecha en algo que tiene más de un > >>>>> elemento ¿Puede ser eso? Si es así ¿Cómo veo lo que hay dentro del > >>> objeto > >>>>> para sacar solo lo que me interese? > >>>>> > >>>>> Muchas gracias. > >>>>> > >>>>> -- > >>>>> Jaume Tormo. > >>>>> https://es.linkedin.com/in/jaumetormo > >>>>> https://acercad.wordpress.com/ > >>>>> > >>>>> [[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 > >>>> > >>> > >>> -- > >>> Jaume Tormo. > >>> https://es.linkedin.com/in/jaumetormo > >>> https://acercad.wordpress.com/ > >>> > >>> [[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]] > > _______________________________________________ > R-help-es mailing list > R-help-es en r-project.org > https://stat.ethz.ch/mailman/listinfo/r-help-es >-- Jaume Tormo. https://es.linkedin.com/in/jaumetormo https://acercad.wordpress.com/ [[alternative HTML version deleted]]