Jaume Tormo
2010-Sep-27 11:34 UTC
[R-es] sutituir valores en un dataframe a partir de los valores de un vector
Hola, Estimados erreros, tengo un problema. Tengo un vector de 360 valores ori: ori<-c(0:359) y otro vector de 360 valores diferentes insolacion: NES<-c(0:180) SEN<-c(179:1) insolacion<-c(NES,SEN) y un dataframe con una serie de valores dades (os adjunto el csv) dades<-read.csv("pas.csv",h=T,sep=";") Para cada valor de ori existe un valor de insolación (tal cual están ordenados en los vectores). Me gustaría que R fuera a dades y sustituyera el valor que hay (que es ori) con el correspondiente de insolación. Como veis la cosa es sencilla, o debería serlo, por que yo llevo ya un rato dándole vueltas a replace(), pero no acabo de ver como conseguirlo. Si veis que está chupado dadme al menos una pista. Muchas gracias a todos. jaume -- Jaume Tormo Blanes IMEM Ramon Margalef. Carretera San Vicente del Raspeig s/n 03690 San Vicente del Raspeig - Alicante www.ua.es acercad.wordpress.com ------------ próxima parte ------------ Se ha borrado un adjunto en formato HTML... URL: <https://stat.ethz.ch/pipermail/r-help-es/attachments/20100927/a6ab83f1/attachment.html> ------------ próxima parte ------------ A non-text attachment was scrubbed... Name: pas.csv Type: application/octet-stream Size: 2641 bytes Desc: no disponible URL: <https://stat.ethz.ch/pipermail/r-help-es/attachments/20100927/a6ab83f1/attachment.obj>
Luciano Selzer
2010-Sep-27 11:51 UTC
[R-es] sutituir valores en un dataframe a partir de los valores de un vector
Hola Jaume: lo más fácil es usar ori para nombrar las filas y después usar la indexación para reemplazar por los valores correspondientes. ori<-c(0:359) NES<-c(0:180) SEN<-c(179:1) insolacion<-c(NES,SEN) dades<-read.csv("pas.csv",h=T,sep=";") names(insolacion) <- ori dades2 <- insolacion[dades$ori] Espero que te sirva. Un Saludo Luciano 2010/9/27 Jaume Tormo <jautorbla@gmail.com>> Hola, > Estimados erreros, tengo un problema. > > Tengo un vector de 360 valores ori: > ori<-c(0:359) > y otro vector de 360 valores diferentes insolacion: > NES<-c(0:180) > SEN<-c(179:1) > insolacion<-c(NES,SEN) > y un dataframe con una serie de valores dades (os adjunto el csv) > dades<-read.csv("pas.csv",h=T,sep=";") > > Para cada valor de ori existe un valor de insolación (tal cual están > ordenados en los vectores). Me gustaría que R fuera a dades y sustituyera el > valor que hay (que es ori) con el correspondiente de insolación. > Como veis la cosa es sencilla, o debería serlo, por que yo llevo ya un rato > dándole vueltas a replace(), pero no acabo de ver como conseguirlo. Si veis > que está chupado dadme al menos una pista. > > > Muchas gracias a todos. > > > jaume > > > > > > -- > Jaume Tormo Blanes > IMEM Ramon Margalef. > Carretera San Vicente del Raspeig s/n > 03690 San Vicente del Raspeig - Alicante > www.ua.es > acercad.wordpress.com > > _______________________________________________ > R-help-es mailing list > R-help-es@r-project.org > https://stat.ethz.ch/mailman/listinfo/r-help-es > >[[alternative HTML version deleted]]
Jaume Tormo
2010-Sep-27 12:38 UTC
[R-es] sutituir valores en un dataframe a partir de los valores de un vector
Hola Luciano, Parecia que si, pero pasa algo raro. La verdad es que no entiendo muy bien lo que me propones, pero mira lo que pasa> ori<-c(0:359) > NES<-c(0:180) > SEN<-c(179:1) > insolacion<-c(NES,SEN) > dades<-read.csv("pas.csv",h=T,sep=";") > length(dades$ori)[1] 570> length(insolacion)[1] 360> length(ori)[1] 360> names(insolacion)<-ori > length(insolacion)[1] 360 hasta aquí todo bien, pero...> dades2 <- insolacion[dades$ori] > length(dades2)[1] 495 este nuevo dades2 debería tener 570 elementos, como dades$ori. No entiendo muy bien qué hace el R cuando le decimos: insolacion[dades$ori] ¿Qué me dices?¿Se apunta alguien más? Gracias de nuevo. El 27 de septiembre de 2010 13:51, Luciano Selzer <luciano.selzer@gmail.com>escribió:> Hola Jaume: lo más fácil es usar ori para nombrar las filas y después usar > la indexación para reemplazar por los valores correspondientes. > > ori<-c(0:359) > NES<-c(0:180) > SEN<-c(179:1) > insolacion<-c(NES,SEN) > dades<-read.csv("pas.csv",h=T,sep=";") > > names(insolacion) <- ori > dades2 <- insolacion[dades$ori] > > Espero que te sirva. > > Un Saludo > Luciano > > > 2010/9/27 Jaume Tormo <jautorbla@gmail.com> > >> Hola, >> Estimados erreros, tengo un problema. >> >> Tengo un vector de 360 valores ori: >> ori<-c(0:359) >> y otro vector de 360 valores diferentes insolacion: >> NES<-c(0:180) >> SEN<-c(179:1) >> insolacion<-c(NES,SEN) >> y un dataframe con una serie de valores dades (os adjunto el csv) >> dades<-read.csv("pas.csv",h=T,sep=";") >> >> Para cada valor de ori existe un valor de insolación (tal cual están >> ordenados en los vectores). Me gustaría que R fuera a dades y sustituyera el >> valor que hay (que es ori) con el correspondiente de insolación. >> Como veis la cosa es sencilla, o debería serlo, por que yo llevo ya un >> rato dándole vueltas a replace(), pero no acabo de ver como conseguirlo. Si >> veis que está chupado dadme al menos una pista. >> >> >> Muchas gracias a todos. >> >> >> jaume >> >> >> >> >> >> -- >> Jaume Tormo Blanes >> IMEM Ramon Margalef. >> Carretera San Vicente del Raspeig s/n >> 03690 San Vicente del Raspeig - Alicante >> www.ua.es >> acercad.wordpress.com >> >> _______________________________________________ >> R-help-es mailing list >> R-help-es@r-project.org >> https://stat.ethz.ch/mailman/listinfo/r-help-es >> >> >-- Jaume Tormo Blanes IMEM Ramon Margalef. Carretera San Vicente del Raspeig s/n 03690 San Vicente del Raspeig - Alicante www.ua.es acercad.wordpress.com [[alternative HTML version deleted]]
Carlos J. Gil Bellosta
2010-Sep-27 15:20 UTC
[R-es] sutituir valores en un dataframe a partir de los valores de un vector
Con esa solución vas a tener problemas porque los nombres son "character" y los datos por los que luego vas a indexar son enteros. Igual funcionaría (digo igual porque no tengo posibidad de probar ahora) utilizando una variante de la idea: names(insolacion) <- as.character(ori) dades2 <- insolacion[ as.character( dades$ori )] Si no se hace el "cast", cuando R encuentra insolacion[ 1 ] piensa que te refieres a la posición 1 de insolación (que es lo que hace) y no a la entrada de insolación a la que has denominado "1". Un saludo, Carlos J. Gil Bellosta http://www.datanalytics.com El día 27 de septiembre de 2010 13:51, Luciano Selzer <luciano.selzer en gmail.com> escribió:> Hola Jaume: lo más fácil es usar ori para nombrar las filas y después usar > la indexación para reemplazar por los valores correspondientes. > > ori<-c(0:359) > NES<-c(0:180) > SEN<-c(179:1) > insolacion<-c(NES,SEN) > dades<-read.csv("pas.csv",h=T,sep=";") > > names(insolacion) <- ori > dades2 <- insolacion[dades$ori] > > Espero que te sirva. > > Un Saludo > Luciano > > > 2010/9/27 Jaume Tormo <jautorbla en gmail.com> > >> Hola, >> Estimados erreros, tengo un problema. >> >> Tengo un vector de 360 valores ori: >> ori<-c(0:359) >> y otro vector de 360 valores diferentes insolacion: >> NES<-c(0:180) >> SEN<-c(179:1) >> insolacion<-c(NES,SEN) >> y un dataframe con una serie de valores dades (os adjunto el csv) >> dades<-read.csv("pas.csv",h=T,sep=";") >> >> Para cada valor de ori existe un valor de insolación (tal cual están >> ordenados en los vectores). Me gustaría que R fuera a dades y sustituyera el >> valor que hay (que es ori) con el correspondiente de insolación. >> Como veis la cosa es sencilla, o debería serlo, por que yo llevo ya un rato >> dándole vueltas a replace(), pero no acabo de ver como conseguirlo. Si veis >> que está chupado dadme al menos una pista. >> >> >> Muchas gracias a todos. >> >> >> jaume >> >> >> >> >> >> -- >> Jaume Tormo Blanes >> IMEM Ramon Margalef. >> Carretera San Vicente del Raspeig s/n >> 03690 San Vicente del Raspeig - Alicante >> www.ua.es >> acercad.wordpress.com >> >> _______________________________________________ >> 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 > >
Luciano Selzer
2010-Sep-27 16:03 UTC
[R-es] sutituir valores en un dataframe a partir de los valores de un vector
Como dice Carlos, agregando as.character funciona. La razón por la que no funciona la otra forma es que hay valores que son ceros. Por lo que que insolación[0] no existe. Saludos Luciano El 27 de septiembre de 2010 12:20, Carlos J. Gil Bellosta < cgb@datanalytics.com> escribió:> Con esa solución vas a tener problemas porque los nombres son > "character" y los datos por los que luego vas a indexar son enteros. > > Igual funcionaría (digo igual porque no tengo posibidad de probar > ahora) utilizando una variante de la idea: > > names(insolacion) <- as.character(ori) > dades2 <- insolacion[ as.character( dades$ori )] > > Si no se hace el "cast", cuando R encuentra > > insolacion[ 1 ] > > piensa que te refieres a la posición 1 de insolación (que es lo que > hace) y no a la entrada de insolación a la que has denominado "1". > > Un saludo, > > Carlos J. Gil Bellosta > http://www.datanalytics.com > > > El día 27 de septiembre de 2010 13:51, Luciano Selzer > <luciano.selzer@gmail.com> escribió: > > Hola Jaume: lo más fácil es usar ori para nombrar las filas y después > usar > > la indexación para reemplazar por los valores correspondientes. > > > > ori<-c(0:359) > > NES<-c(0:180) > > SEN<-c(179:1) > > insolacion<-c(NES,SEN) > > dades<-read.csv("pas.csv",h=T,sep=";") > > > > names(insolacion) <- ori > > dades2 <- insolacion[dades$ori] > > > > Espero que te sirva. > > > > Un Saludo > > Luciano > > > > > > 2010/9/27 Jaume Tormo <jautorbla@gmail.com> > > > >> Hola, > >> Estimados erreros, tengo un problema. > >> > >> Tengo un vector de 360 valores ori: > >> ori<-c(0:359) > >> y otro vector de 360 valores diferentes insolacion: > >> NES<-c(0:180) > >> SEN<-c(179:1) > >> insolacion<-c(NES,SEN) > >> y un dataframe con una serie de valores dades (os adjunto el csv) > >> dades<-read.csv("pas.csv",h=T,sep=";") > >> > >> Para cada valor de ori existe un valor de insolación (tal cual están > >> ordenados en los vectores). Me gustaría que R fuera a dades y > sustituyera el > >> valor que hay (que es ori) con el correspondiente de insolación. > >> Como veis la cosa es sencilla, o debería serlo, por que yo llevo ya un > rato > >> dándole vueltas a replace(), pero no acabo de ver como conseguirlo. Si > veis > >> que está chupado dadme al menos una pista. > >> > >> > >> Muchas gracias a todos. > >> > >> > >> jaume > >> > >> > >> > >> > >> > >> -- > >> Jaume Tormo Blanes > >> IMEM Ramon Margalef. > >> Carretera San Vicente del Raspeig s/n > >> 03690 San Vicente del Raspeig - Alicante > >> www.ua.es > >> acercad.wordpress.com > >> > >> _______________________________________________ > >> R-help-es mailing list > >> R-help-es@r-project.org > >> https://stat.ethz.ch/mailman/listinfo/r-help-es > >> > >> > > > > [[alternative HTML version deleted]] > > > > > > _______________________________________________ > > R-help-es mailing list > > R-help-es@r-project.org > > https://stat.ethz.ch/mailman/listinfo/r-help-es > > > > >[[alternative HTML version deleted]]
Jaume Tormo
2010-Sep-27 17:16 UTC
[R-es] sutituir valores en un dataframe a partir de los valores de un vector
Gracias los dos. Voy a ver que tal me queda. jaume El 27 de septiembre de 2010 18:03, Luciano Selzer <luciano.selzer@gmail.com>escribió:> Como dice Carlos, agregando as.character funciona. La razón por la que no > funciona la otra forma es que hay valores que son ceros. Por lo que que > insolación[0] no existe. > > Saludos > Luciano > > > El 27 de septiembre de 2010 12:20, Carlos J. Gil Bellosta < > cgb@datanalytics.com> escribió: > > Con esa solución vas a tener problemas porque los nombres son >> "character" y los datos por los que luego vas a indexar son enteros. >> >> Igual funcionaría (digo igual porque no tengo posibidad de probar >> ahora) utilizando una variante de la idea: >> >> names(insolacion) <- as.character(ori) >> dades2 <- insolacion[ as.character( dades$ori )] >> >> Si no se hace el "cast", cuando R encuentra >> >> insolacion[ 1 ] >> >> piensa que te refieres a la posición 1 de insolación (que es lo que >> hace) y no a la entrada de insolación a la que has denominado "1". >> >> Un saludo, >> >> Carlos J. Gil Bellosta >> http://www.datanalytics.com >> >> >> El día 27 de septiembre de 2010 13:51, Luciano Selzer >> <luciano.selzer@gmail.com> escribió: >> > Hola Jaume: lo más fácil es usar ori para nombrar las filas y después >> usar >> > la indexación para reemplazar por los valores correspondientes. >> > >> > ori<-c(0:359) >> > NES<-c(0:180) >> > SEN<-c(179:1) >> > insolacion<-c(NES,SEN) >> > dades<-read.csv("pas.csv",h=T,sep=";") >> > >> > names(insolacion) <- ori >> > dades2 <- insolacion[dades$ori] >> > >> > Espero que te sirva. >> > >> > Un Saludo >> > Luciano >> > >> > >> > 2010/9/27 Jaume Tormo <jautorbla@gmail.com> >> > >> >> Hola, >> >> Estimados erreros, tengo un problema. >> >> >> >> Tengo un vector de 360 valores ori: >> >> ori<-c(0:359) >> >> y otro vector de 360 valores diferentes insolacion: >> >> NES<-c(0:180) >> >> SEN<-c(179:1) >> >> insolacion<-c(NES,SEN) >> >> y un dataframe con una serie de valores dades (os adjunto el csv) >> >> dades<-read.csv("pas.csv",h=T,sep=";") >> >> >> >> Para cada valor de ori existe un valor de insolación (tal cual están >> >> ordenados en los vectores). Me gustaría que R fuera a dades y >> sustituyera el >> >> valor que hay (que es ori) con el correspondiente de insolación. >> >> Como veis la cosa es sencilla, o debería serlo, por que yo llevo ya un >> rato >> >> dándole vueltas a replace(), pero no acabo de ver como conseguirlo. Si >> veis >> >> que está chupado dadme al menos una pista. >> >> >> >> >> >> Muchas gracias a todos. >> >> >> >> >> >> jaume >> >> >> >> >> >> >> >> >> >> >> >> -- >> >> Jaume Tormo Blanes >> >> IMEM Ramon Margalef. >> >> Carretera San Vicente del Raspeig s/n >> >> 03690 San Vicente del Raspeig - Alicante >> >> www.ua.es >> >> acercad.wordpress.com >> >> >> >> _______________________________________________ >> >> R-help-es mailing list >> >> R-help-es@r-project.org >> >> https://stat.ethz.ch/mailman/listinfo/r-help-es >> >> >> >> >> > >> > [[alternative HTML version deleted]] >> > >> > >> > _______________________________________________ >> > R-help-es mailing list >> > R-help-es@r-project.org >> > https://stat.ethz.ch/mailman/listinfo/r-help-es >> > >> > >> > >-- Jaume Tormo Blanes IMEM Ramon Margalef. Carretera San Vicente del Raspeig s/n 03690 San Vicente del Raspeig - Alicante www.ua.es acercad.wordpress.com [[alternative HTML version deleted]]