Par evitar el warning....> DT=data.table(col1=1:10) > DT[,col2:=diff(log(c(1,col1)))] > DTcol1 col2 1: 1 0.0000000 2: 2 0.6931472 3: 3 0.4054651 4: 4 0.2876821 5: 5 0.2231436 6: 6 0.1823216 7: 7 0.1541507 8: 8 0.1335314 9: 9 0.1177830 10: 10 0.1053605>----- Mensaje original ----- De: "Carlos Ortega" <cof en qualityexcellence.es> Para: "Eric" <ericconchamunoz en gmail.com> CC: r-help-es en r-project.org Enviados: Miércoles, 11 de Marzo 2015 15:19:07 Asunto: Re: [R-es] como hacer una operacion con data.table Hola, Así sería una forma... #----------------> library(data.table) > DT <- data.table(x=seq(1:20)) > DT[ 2:nrow(DT), col2 := diff(log(x)) ]Mensajes de aviso perdidos In `[.data.table`(DT, 2:nrow(DT), `:=`(col2, diff(log(x)))) : Supplied 18 items to be assigned to 19 items of column 'col2' (recycled leaving remainder of 1 items).> head(DT)x col2 1: 1 NA 2: 2 0.4054651 3: 3 0.2876821 4: 4 0.2231436 5: 5 0.1823216 6: 6 0.1541507> log(2) - log(1)[1] 0.6931472> log(3) - log(2)[1] 0.4054651 #---------------- Saludos, Carlos Ortega www.qualityexcellence.es El 10 de marzo de 2015, 23:48, Eric <ericconchamunoz en gmail.com> escribió:> estimados, siempre habia usado data.frame, pero estoy tratando de aprender > a usar data.table porque normalmente tengo que manejar una buena cantidad > de datos > > ahora necesito hacer un calculo simple, para el que antes usaba ciclos FOR, > pero quiero aprovechar las ventajas de data.table > > mi preguna es como podria calcular, por ejemplo, la columna 2 de un > data.table llamada DT si el valor de la primera columna es una serie de 1 a > 10, y la celda de la fila m de la segunda columna es igual al valor de la > celda m de la primera columna menos la celda m-1 de la primera columna. > > me explico ?? > > si fuera un ciclo con data.frame lo haria asi: > > i <- 2 > for (i in 2:nrow(DT)) > { > DT[i,col2] <- log(DT[i,col1]) - log(DT[i-1,col1]) > i <- i + 1 > } > > No escribi toda la nomenclatura pero se entiende la idea, cierto ? > > Espero me den una mano como siempre. > > Muchas gracias !!!!! > > > > > > -- > Nota: las tildes se han omitido para evitar conflictos con algunos lectores > de correo. > > Frases notables: > * SATYÂT NÂSTI PARO DHARMAH (No hay religion mas elevada que la verdad) > * La oscuridad no se combate, se ilumina ... > * Un economista es un experto que sabrá mañana por qué las cosas que > predijo > ayer no han sucedido hoy (Laurence Peter). > > [[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
Hola Olivier, podrias explicarme como los argumentos que pones dentro de diff() evitan que se genere el NA de la primera celda de col2, por favor ... quisiera aplicarlo a otra situacion pero no entiendo bien como funciona. Muchas gracias, Eric. On 3/12/15, Olivier Nuñez <onunez en unex.es> wrote:> Par evitar el warning.... > >> DT=data.table(col1=1:10) >> DT[,col2:=diff(log(c(1,col1)))] >> DT > col1 col2 > 1: 1 0.0000000 > 2: 2 0.6931472 > 3: 3 0.4054651 > 4: 4 0.2876821 > 5: 5 0.2231436 > 6: 6 0.1823216 > 7: 7 0.1541507 > 8: 8 0.1335314 > 9: 9 0.1177830 > 10: 10 0.1053605 >> > > > ----- Mensaje original ----- > De: "Carlos Ortega" <cof en qualityexcellence.es> > Para: "Eric" <ericconchamunoz en gmail.com> > CC: r-help-es en r-project.org > Enviados: Miércoles, 11 de Marzo 2015 15:19:07 > Asunto: Re: [R-es] como hacer una operacion con data.table > > Hola, > > Así sería una forma... > > #---------------- >> library(data.table) >> DT <- data.table(x=seq(1:20)) >> DT[ 2:nrow(DT), col2 := diff(log(x)) ] > Mensajes de aviso perdidos > In `[.data.table`(DT, 2:nrow(DT), `:=`(col2, diff(log(x)))) : > Supplied 18 items to be assigned to 19 items of column 'col2' (recycled > leaving remainder of 1 items). >> head(DT) > x col2 > 1: 1 NA > 2: 2 0.4054651 > 3: 3 0.2876821 > 4: 4 0.2231436 > 5: 5 0.1823216 > 6: 6 0.1541507 >> log(2) - log(1) > [1] 0.6931472 >> log(3) - log(2) > [1] 0.4054651 > > #---------------- > > Saludos, > Carlos Ortega > www.qualityexcellence.es > > El 10 de marzo de 2015, 23:48, Eric <ericconchamunoz en gmail.com> escribió: > >> estimados, siempre habia usado data.frame, pero estoy tratando de >> aprender >> a usar data.table porque normalmente tengo que manejar una buena cantidad >> de datos >> >> ahora necesito hacer un calculo simple, para el que antes usaba ciclos >> FOR, >> pero quiero aprovechar las ventajas de data.table >> >> mi preguna es como podria calcular, por ejemplo, la columna 2 de un >> data.table llamada DT si el valor de la primera columna es una serie de 1 >> a >> 10, y la celda de la fila m de la segunda columna es igual al valor de la >> celda m de la primera columna menos la celda m-1 de la primera columna. >> >> me explico ?? >> >> si fuera un ciclo con data.frame lo haria asi: >> >> i <- 2 >> for (i in 2:nrow(DT)) >> { >> DT[i,col2] <- log(DT[i,col1]) - log(DT[i-1,col1]) >> i <- i + 1 >> } >> >> No escribi toda la nomenclatura pero se entiende la idea, cierto ? >> >> Espero me den una mano como siempre. >> >> Muchas gracias !!!!! >> >> >> >> >> >> -- >> Nota: las tildes se han omitido para evitar conflictos con algunos >> lectores >> de correo. >> >> Frases notables: >> * SATYÂT NÂSTI PARO DHARMAH (No hay religion mas elevada que la verdad) >> * La oscuridad no se combate, se ilumina ... >> * Un economista es un experto que sabrá mañana por qué las cosas que >> predijo >> ayer no han sucedido hoy (Laurence Peter). >> >> [[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 >-- Nota: las tildes se han omitido para evitar conflictos con algunos lectores de correo. Frases notables: * SATYÂT NÂSTI PARO DHARMAH (No hay religion mas elevada que la verdad) * La oscuridad no se combate, se ilumina ... * Un economista es un experto que sabrá mañana por qué las cosas que predijo ayer no han sucedido hoy (Laurence Peter).
Hola, Lo que haces son varias cosas: - así es añadir un "1" al conjunto como primer elemento. - Y el ciclo de diferencias "diff()" le aplicas a todas las filas, no como antes empezando en la segunda fila. De esta forma cuando haces la diferencias de logaritmos lo que haces es calcular: log(1) - log(1) y aparece el cero inicial. Si no lo haces, como puse yo, al empezar el ciclo en el segundo elemento, el primero queda sin definir y por eso aparece un NA y el mensaje de aviso. Saludos, Carlos. El 13 de marzo de 2015, 23:59, Eric <ericconchamunoz en gmail.com> escribió:> Hola Olivier, podrias explicarme como los argumentos que pones dentro > de diff() evitan que se genere el NA de la primera celda de col2, por > favor ... quisiera aplicarlo a otra situacion pero no entiendo bien > como funciona. > > Muchas gracias, > > Eric. > > > > > > > > On 3/12/15, Olivier Nuñez <onunez en unex.es> wrote: > > Par evitar el warning.... > > > >> DT=data.table(col1=1:10) > >> DT[,col2:=diff(log(c(1,col1)))] > >> DT > > col1 col2 > > 1: 1 0.0000000 > > 2: 2 0.6931472 > > 3: 3 0.4054651 > > 4: 4 0.2876821 > > 5: 5 0.2231436 > > 6: 6 0.1823216 > > 7: 7 0.1541507 > > 8: 8 0.1335314 > > 9: 9 0.1177830 > > 10: 10 0.1053605 > >> > > > > > > ----- Mensaje original ----- > > De: "Carlos Ortega" <cof en qualityexcellence.es> > > Para: "Eric" <ericconchamunoz en gmail.com> > > CC: r-help-es en r-project.org > > Enviados: Miércoles, 11 de Marzo 2015 15:19:07 > > Asunto: Re: [R-es] como hacer una operacion con data.table > > > > Hola, > > > > Así sería una forma... > > > > #---------------- > >> library(data.table) > >> DT <- data.table(x=seq(1:20)) > >> DT[ 2:nrow(DT), col2 := diff(log(x)) ] > > Mensajes de aviso perdidos > > In `[.data.table`(DT, 2:nrow(DT), `:=`(col2, diff(log(x)))) : > > Supplied 18 items to be assigned to 19 items of column 'col2' (recycled > > leaving remainder of 1 items). > >> head(DT) > > x col2 > > 1: 1 NA > > 2: 2 0.4054651 > > 3: 3 0.2876821 > > 4: 4 0.2231436 > > 5: 5 0.1823216 > > 6: 6 0.1541507 > >> log(2) - log(1) > > [1] 0.6931472 > >> log(3) - log(2) > > [1] 0.4054651 > > > > #---------------- > > > > Saludos, > > Carlos Ortega > > www.qualityexcellence.es > > > > El 10 de marzo de 2015, 23:48, Eric <ericconchamunoz en gmail.com> > escribió: > > > >> estimados, siempre habia usado data.frame, pero estoy tratando de > >> aprender > >> a usar data.table porque normalmente tengo que manejar una buena > cantidad > >> de datos > >> > >> ahora necesito hacer un calculo simple, para el que antes usaba ciclos > >> FOR, > >> pero quiero aprovechar las ventajas de data.table > >> > >> mi preguna es como podria calcular, por ejemplo, la columna 2 de un > >> data.table llamada DT si el valor de la primera columna es una serie de > 1 > >> a > >> 10, y la celda de la fila m de la segunda columna es igual al valor de > la > >> celda m de la primera columna menos la celda m-1 de la primera columna. > >> > >> me explico ?? > >> > >> si fuera un ciclo con data.frame lo haria asi: > >> > >> i <- 2 > >> for (i in 2:nrow(DT)) > >> { > >> DT[i,col2] <- log(DT[i,col1]) - log(DT[i-1,col1]) > >> i <- i + 1 > >> } > >> > >> No escribi toda la nomenclatura pero se entiende la idea, cierto ? > >> > >> Espero me den una mano como siempre. > >> > >> Muchas gracias !!!!! > >> > >> > >> > >> > >> > >> -- > >> Nota: las tildes se han omitido para evitar conflictos con algunos > >> lectores > >> de correo. > >> > >> Frases notables: > >> * SATYÂT NÂSTI PARO DHARMAH (No hay religion mas elevada que la verdad) > >> * La oscuridad no se combate, se ilumina ... > >> * Un economista es un experto que sabrá mañana por qué las cosas que > >> predijo > >> ayer no han sucedido hoy (Laurence Peter). > >> > >> [[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 > > > > > -- > Nota: las tildes se han omitido para evitar conflictos con algunos lectores > de correo. > > Frases notables: > * SATYÂT NÂSTI PARO DHARMAH (No hay religion mas elevada que la verdad) > * La oscuridad no se combate, se ilumina ... > * Un economista es un experto que sabrá mañana por qué las cosas que > predijo > ayer no han sucedido hoy (Laurence Peter). >-- Saludos, Carlos Ortega www.qualityexcellence.es [[alternative HTML version deleted]]