Hola: Como dice Carlos, algo así, por ejemplo: transforma <- function(df) sapply(df, function(x) ifelse(x%in%c("x1","x2","x3"), "prueba1",ifelse(x%in%c("x4","x5","x6"),"prueba2",x))) > transforma(df1) col1 [1,] "prueba1" [2,] "prueba1" [3,] "x11" [4,] "prueba1" [5,] "x33" [6,] "prueba1" [7,] "prueba2" [8,] "prueba2" [9,] "x35" [10,] "prueba1" [11,] "prueba1" [12,] "prueba2" > transforma(df2) col2 [1,] "x12" [2,] "prueba2" [3,] "prueba2" [4,] "x771" [5,] "prueba2" [6,] "prueba1" > transforma(df3) col3 [1,] "x7" [2,] "prueba1" [3,] "prueba2" [4,] "prueba2" [5,] "x111" [6,] "prueba1" [7,] "prueba2" [8,] "prueba2" [9,] "x35" [10,] "prueba1" [11,] "prueba1" [12,] "prueba2" [13,] "prueba2" [14,] "prueba2" Saludos, Marcelino El 10/09/2020 a las 9:41, Carlos Ortega escribió:> Hola, > Si lo estoy entendiendo bien, lo que tienes que crearte es una función. > A la función le pasarías unos parámetros (las columnas y el dataframe al > que añadir la transformación), y en el cuerpo de la función haces esos > cálculos. > > Gracias, > Carlos. > > > > Gracias, > Carlos. > > El jue., 10 sept. 2020 a las 3:55, Samura . (<tontito82 en hotmail.com>) > escribió: > >> Hola, >> me gustaría hacer algo como en el siguiente ejemplo >> >> A un df añadirle una columna que es la transformación de otra, >> en plan a todo lo que sea x1, x2, x3 lo llamo prueba 1 >> todo lo que sea x4,x5,x6 lo llamo prueba 2 >> el resto de x las dejo como están. >> >> Sería algo así >> >> col1 <- c('x1', 'x2', 'x11', 'x1','x33', 'x1','x4', 'x5', 'x35', >> 'x1','x2', 'x4') >> df1<-data.frame(col1) >> attach(df1) >> >> df1$transformacion<-ifelse(col1 == "x1"|col1 == "x2"| col1 == "x3", >> "prueba1", >> ifelse(col1 == "x4"|col1 == "x5"| col1 == "x6", >> "prueba2", col1)) >> >> detach(df1) >> df1 >> >> pero ahora en vez de un df tengo varios >> >> col2 <- c('x12', 'x4', 'x6', 'x771','x4', 'x2') >> col3 <- c('x7', 'x2', 'x4', 'x5','x111', 'x1','x4', 'x5', 'x35','x2','x2', >> 'x4','x6', 'x5') >> df2<-data.frame(col2) >> df3<-data.frame(col3) >> >> ¿cómo puedo aplicar el código al resto de los df sin tener que repetirlo? >> >> >> >> [[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 >> >-- Marcelino de la Cruz Rot Depto. de Biología y Geología Física y Química Inorgánica Universidad Rey Juan Carlos Móstoles España
Gracias por las respuestas. Prob? lo de hacer la funci?n y no me sal?a. Pensaba que hac?a algo mal. Ahora con el c?digo de Marcelino tampoco me sale. col1 <- c('x1', 'x2', 'x11', 'x1','x33', 'x1','x4', 'x5', 'x35', 'x1','x2', 'x4') col2 <- c('x12', 'x4', 'x6', 'x771','x4', 'x2') col3 <- c('x7', 'x2', 'x4', 'x5','x111', 'x1','x4', 'x5', 'x35','x2','x2', 'x4','x6', 'x5') df1<-data.frame(col1) df2<-data.frame(col2) df3<-data.frame(col3) transforma <- function(df) sapply(df, function(x) ifelse(x%in%c("x1","x2","x3"), "prueba12",ifelse(x%in%c("x4","x5","x6"),"prueba2",x))) transforma(df1) col1 [1,] "prueba12" [2,] "prueba12" [3,] "2" [4,] "prueba12" [5,] "4" [6,] "prueba12" [7,] "prueba2" [8,] "prueba2" [9,] "5" [10,] "prueba12" [11,] "prueba12" [12,] "prueba2" ?Alguna idea de pq me sale 2, 4, 5? ________________________________ De: R-help-es <r-help-es-bounces en r-project.org> en nombre de Marcelino de la Cruz Rot <marcelino.delacruz en urjc.es> Enviado: jueves, 10 de septiembre de 2020 9:36 Para: r-help-es en r-project.org <r-help-es en r-project.org> Asunto: Re: [R-es] aplicar codigo Hola: Como dice Carlos, algo as?, por ejemplo: transforma <- function(df) sapply(df, function(x) ifelse(x%in%c("x1","x2","x3"), "prueba1",ifelse(x%in%c("x4","x5","x6"),"prueba2",x))) > transforma(df1) col1 [1,] "prueba1" [2,] "prueba1" [3,] "x11" [4,] "prueba1" [5,] "x33" [6,] "prueba1" [7,] "prueba2" [8,] "prueba2" [9,] "x35" [10,] "prueba1" [11,] "prueba1" [12,] "prueba2" > transforma(df2) col2 [1,] "x12" [2,] "prueba2" [3,] "prueba2" [4,] "x771" [5,] "prueba2" [6,] "prueba1" > transforma(df3) col3 [1,] "x7" [2,] "prueba1" [3,] "prueba2" [4,] "prueba2" [5,] "x111" [6,] "prueba1" [7,] "prueba2" [8,] "prueba2" [9,] "x35" [10,] "prueba1" [11,] "prueba1" [12,] "prueba2" [13,] "prueba2" [14,] "prueba2" Saludos, Marcelino El 10/09/2020 a las 9:41, Carlos Ortega escribi?:> Hola, > Si lo estoy entendiendo bien, lo que tienes que crearte es una funci?n. > A la funci?n le pasar?as unos par?metros (las columnas y el dataframe al > que a?adir la transformaci?n), y en el cuerpo de la funci?n haces esos > c?lculos. > > Gracias, > Carlos. > > > > Gracias, > Carlos. > > El jue., 10 sept. 2020 a las 3:55, Samura . (<tontito82 en hotmail.com>) > escribi?: > >> Hola, >> me gustar?a hacer algo como en el siguiente ejemplo >> >> A un df a?adirle una columna que es la transformaci?n de otra, >> en plan a todo lo que sea x1, x2, x3 lo llamo prueba 1 >> todo lo que sea x4,x5,x6 lo llamo prueba 2 >> el resto de x las dejo como est?n. >> >> Ser?a algo as? >> >> col1 <- c('x1', 'x2', 'x11', 'x1','x33', 'x1','x4', 'x5', 'x35', >> 'x1','x2', 'x4') >> df1<-data.frame(col1) >> attach(df1) >> >> df1$transformacion<-ifelse(col1 == "x1"|col1 == "x2"| col1 == "x3", >> "prueba1", >> ifelse(col1 == "x4"|col1 == "x5"| col1 == "x6", >> "prueba2", col1)) >> >> detach(df1) >> df1 >> >> pero ahora en vez de un df tengo varios >> >> col2 <- c('x12', 'x4', 'x6', 'x771','x4', 'x2') >> col3 <- c('x7', 'x2', 'x4', 'x5','x111', 'x1','x4', 'x5', 'x35','x2','x2', >> 'x4','x6', 'x5') >> df2<-data.frame(col2) >> df3<-data.frame(col3) >> >> ?c?mo puedo aplicar el c?digo al resto de los df sin tener que repetirlo? >> >> >> >> [[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 >> >-- Marcelino de la Cruz Rot Depto. de Biolog?a y Geolog?a F?sica y Qu?mica Inorg?nica Universidad Rey Juan Carlos M?stoles Espa?a _______________________________________________ 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 copio y pego este código y me sale correctamente. Se me ocurre que pueda deberse a la versión de R ¿cuál usas? El 10/09/2020 a las 17:51, Samura . escribió:> Gracias por las respuestas. > > Probé lo de hacer la función y no me salía. Pensaba que hacía algo mal. > Ahora con el código de Marcelino tampoco me sale. > > col1 <- c('x1', 'x2', 'x11', 'x1','x33', 'x1','x4', 'x5', 'x35', > 'x1','x2', 'x4') > col2 <- c('x12', 'x4', 'x6', 'x771','x4', 'x2') > col3 <- c('x7', 'x2', 'x4', 'x5','x111', 'x1','x4', 'x5', > 'x35','x2','x2', 'x4','x6', 'x5') > > df1<-data.frame(col1) > df2<-data.frame(col2) > df3<-data.frame(col3) > > transforma <- function(df) sapply(df, function(x) > ifelse(x%in%c("x1","x2","x3"), > "prueba12",ifelse(x%in%c("x4","x5","x6"),"prueba2",x))) > > transforma(df1) > col1 > [1,] "prueba12" > [2,] "prueba12" > [3,] "2" > [4,] "prueba12" > [5,] "4" > [6,] "prueba12" > [7,] "prueba2" > [8,] "prueba2" > [9,] "5" > [10,] "prueba12" > [11,] "prueba12" > [12,] "prueba2" > > ¿Alguna idea de pq me sale 2, 4, 5? > ------------------------------------------------------------------------ > *De:* R-help-es <r-help-es-bounces en r-project.org> en nombre de > Marcelino de la Cruz Rot <marcelino.delacruz en urjc.es> > *Enviado:* jueves, 10 de septiembre de 2020 9:36 > *Para:* r-help-es en r-project.org <r-help-es en r-project.org> > *Asunto:* Re: [R-es] aplicar codigo > Hola: > Como dice Carlos, algo así, por ejemplo: > > transforma <- function(df) sapply(df, function(x) > ifelse(x%in%c("x1","x2","x3"), > "prueba1",ifelse(x%in%c("x4","x5","x6"),"prueba2",x))) > > > > transforma(df1) > col1 > [1,] "prueba1" > [2,] "prueba1" > [3,] "x11" > [4,] "prueba1" > [5,] "x33" > [6,] "prueba1" > [7,] "prueba2" > [8,] "prueba2" > [9,] "x35" > [10,] "prueba1" > [11,] "prueba1" > [12,] "prueba2" > > > > transforma(df2) > col2 > [1,] "x12" > [2,] "prueba2" > [3,] "prueba2" > [4,] "x771" > [5,] "prueba2" > [6,] "prueba1" > > > > transforma(df3) > col3 > [1,] "x7" > [2,] "prueba1" > [3,] "prueba2" > [4,] "prueba2" > [5,] "x111" > [6,] "prueba1" > [7,] "prueba2" > [8,] "prueba2" > [9,] "x35" > [10,] "prueba1" > [11,] "prueba1" > [12,] "prueba2" > [13,] "prueba2" > [14,] "prueba2" > > Saludos, > > Marcelino > > El 10/09/2020 a las 9:41, Carlos Ortega escribió: > > Hola, > > Si lo estoy entendiendo bien, lo que tienes que crearte es una función. > > A la función le pasarías unos parámetros (las columnas y el dataframe al > > que añadir la transformación), y en el cuerpo de la función haces esos > > cálculos. > > > > Gracias, > > Carlos. > > > > > > > > Gracias, > > Carlos. > > > > El jue., 10 sept. 2020 a las 3:55, Samura . (<tontito82 en hotmail.com>) > > escribió: > > > >> Hola, > >> me gustaría hacer algo como en el siguiente ejemplo > >> > >> A un df añadirle una columna que es la transformación de otra, > >> en plan a todo lo que sea x1, x2, x3 lo llamo prueba 1 > >> todo lo que sea x4,x5,x6 lo llamo prueba 2 > >> el resto de x las dejo como están. > >> > >> Sería algo así > >> > >> col1 <- c('x1', 'x2', 'x11', 'x1','x33', 'x1','x4', 'x5', 'x35', > >> 'x1','x2', 'x4') > >> df1<-data.frame(col1) > >> attach(df1) > >> > >> df1$transformacion<-ifelse(col1 == "x1"|col1 == "x2"| col1 == "x3", > >> "prueba1", > >> ifelse(col1 == "x4"|col1 == "x5"| col1 > == "x6", > >> "prueba2", col1)) > >> > >> detach(df1) > >> df1 > >> > >> pero ahora en vez de un df tengo varios > >> > >> col2 <- c('x12', 'x4', 'x6', 'x771','x4', 'x2') > >> col3 <- c('x7', 'x2', 'x4', 'x5','x111', 'x1','x4', 'x5', > 'x35','x2','x2', > >> 'x4','x6', 'x5') > >> df2<-data.frame(col2) > >> df3<-data.frame(col3) > >> > >> ¿cómo puedo aplicar el código al resto de los df sin tener que > repetirlo? > >> > >> > >> > >> [[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 > <https://stat.ethz.ch/mailman/listinfo/r-help-es> > >> > > > > -- > Marcelino de la Cruz Rot > Depto. de Biología y Geología > Física y Química Inorgánica > Universidad Rey Juan Carlos > Móstoles España > > _______________________________________________ > R-help-es mailing list > 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>-- Marcelino de la Cruz Rot Depto. de Biología y Geología Física y Química Inorgánica Universidad Rey Juan Carlos Móstoles España
Ya sé a qué se debe: En vuestro R, la función data.frame transforma automáticamente los vectores de tipo /character/ a tipo/factor/. Con un factor, sapply devuelve el número del nivel correspondiente: > col1 <- c('x1', 'x2', 'x11', 'x1','x33', 'x1','x4', 'x5', 'x35', 'x1','x2', 'x4') > sapply(col1, function(x) ifelse(x%in%c("x1","x2","x3"), "prueba12",ifelse(x%in%c("x4","x5","x6"),"prueba2",x))) x1 x2 x11 x1 x33 x1 x4 x5 x35 x1 x2 x4 "prueba12" "prueba12" "x11" "prueba12" "x33" "prueba12" "prueba2" "prueba2" "x35" "prueba12" "prueba12" "prueba2" > sapply(factor(col1), function(x) ifelse(x%in%c("x1","x2","x3"), "prueba12",ifelse(x%in%c("x4","x5","x6"),"prueba2",x))) [1] "prueba12" "prueba12" "2" "prueba12" "4" "prueba12" "prueba2" "prueba2" "5" "prueba12" "prueba12" "prueba2" > El 10/09/2020 a las 20:35, David Mateos escribió:> Hola, > a mí me sucede como a Samura y no consigo entender de donde salen esos > "2", "4" y "5" para df1. ¿Alguien puede arrojar luz? > Tanto con la versión 3.6 como con la 4.0.2 > > Si me funciona con > ``` > transforma <- function(df) { > apply(df, 1, function(x) > ifelse(x%in%c("x1","x2","x3"), > "prueba12", > ifelse(x%in%c("x4","x5","x6"), > "prueba2",x) > ) > ) > } > df1$transformacion <- transforma(df1) > ``` > Un saludo, > David > > Enviado desde Outlook <http://aka.ms/weboutlook> > > ------------------------------------------------------------------------ > *De:* R-help-es <r-help-es-bounces en r-project.org> en nombre de > Marcelino de la Cruz Rot <marcelino.delacruz en urjc.es> > *Enviado:* jueves, 10 de septiembre de 2020 19:15 > *Para:* Samura . <tontito82 en hotmail.com>; r-help-es en r-project.org > <r-help-es en r-project.org> > *Asunto:* Re: [R-es] aplicar codigo > Yo copio y pego este código y me sale correctamente. Se me ocurre que > pueda deberse a la versión de R ¿cuál usas? > > > El 10/09/2020 a las 17:51, Samura . escribió: > > Gracias por las respuestas. > > > > Probé lo de hacer la función y no me salía. Pensaba que hacía algo mal. > > Ahora con el código de Marcelino tampoco me sale. > > > > col1 <- c('x1', 'x2', 'x11', 'x1','x33', 'x1','x4', 'x5', 'x35', > > 'x1','x2', 'x4') > > col2 <- c('x12', 'x4', 'x6', 'x771','x4', 'x2') > > col3 <- c('x7', 'x2', 'x4', 'x5','x111', 'x1','x4', 'x5', > > 'x35','x2','x2', 'x4','x6', 'x5') > > > > df1<-data.frame(col1) > > df2<-data.frame(col2) > > df3<-data.frame(col3) > > > > transforma <- function(df) sapply(df, function(x) > > ifelse(x%in%c("x1","x2","x3"), > > "prueba12",ifelse(x%in%c("x4","x5","x6"),"prueba2",x))) > > > > transforma(df1) > > col1 > > [1,] "prueba12" > > [2,] "prueba12" > > [3,] "2" > > [4,] "prueba12" > > [5,] "4" > > [6,] "prueba12" > > [7,] "prueba2" > > [8,] "prueba2" > > [9,] "5" > > [10,] "prueba12" > > [11,] "prueba12" > > [12,] "prueba2" > > > > ¿Alguna idea de pq me sale 2, 4, 5? > > ------------------------------------------------------------------------ > > *De:* R-help-es <r-help-es-bounces en r-project.org> en nombre de > > Marcelino de la Cruz Rot <marcelino.delacruz en urjc.es> > > *Enviado:* jueves, 10 de septiembre de 2020 9:36 > > *Para:* r-help-es en r-project.org <r-help-es en r-project.org> > > *Asunto:* Re: [R-es] aplicar codigo > > Hola: > > Como dice Carlos, algo así, por ejemplo: > > > > transforma <- function(df) sapply(df, function(x) > > ifelse(x%in%c("x1","x2","x3"), > > "prueba1",ifelse(x%in%c("x4","x5","x6"),"prueba2",x))) > > > > > > > transforma(df1) > > col1 > > [1,] "prueba1" > > [2,] "prueba1" > > [3,] "x11" > > [4,] "prueba1" > > [5,] "x33" > > [6,] "prueba1" > > [7,] "prueba2" > > [8,] "prueba2" > > [9,] "x35" > > [10,] "prueba1" > > [11,] "prueba1" > > [12,] "prueba2" > > > > > > > transforma(df2) > > col2 > > [1,] "x12" > > [2,] "prueba2" > > [3,] "prueba2" > > [4,] "x771" > > [5,] "prueba2" > > [6,] "prueba1" > > > > > > > transforma(df3) > > col3 > > [1,] "x7" > > [2,] "prueba1" > > [3,] "prueba2" > > [4,] "prueba2" > > [5,] "x111" > > [6,] "prueba1" > > [7,] "prueba2" > > [8,] "prueba2" > > [9,] "x35" > > [10,] "prueba1" > > [11,] "prueba1" > > [12,] "prueba2" > > [13,] "prueba2" > > [14,] "prueba2" > > > > Saludos, > > > > Marcelino > > > > El 10/09/2020 a las 9:41, Carlos Ortega escribió: > > > Hola, > > > Si lo estoy entendiendo bien, lo que tienes que crearte es una > función. > > > A la función le pasarías unos parámetros (las columnas y el > dataframe al > > > que añadir la transformación), y en el cuerpo de la función haces esos > > > cálculos. > > > > > > Gracias, > > > Carlos. > > > > > > > > > > > > Gracias, > > > Carlos. > > > > > > El jue., 10 sept. 2020 a las 3:55, Samura . (<tontito82 en hotmail.com>) > > > escribió: > > > > > >> Hola, > > >> me gustaría hacer algo como en el siguiente ejemplo > > >> > > >> A un df añadirle una columna que es la transformación de otra, > > >> en plan a todo lo que sea x1, x2, x3 lo llamo prueba 1 > > >> todo lo que sea x4,x5,x6 lo llamo prueba 2 > > >> el resto de x las dejo como están. > > >> > > >> Sería algo así > > >> > > >> col1 <- c('x1', 'x2', 'x11', 'x1','x33', 'x1','x4', 'x5', 'x35', > > >> 'x1','x2', 'x4') > > >> df1<-data.frame(col1) > > >> attach(df1) > > >> > > >> df1$transformacion<-ifelse(col1 == "x1"|col1 == "x2"| col1 == "x3", > > >> "prueba1", > > >> ifelse(col1 == "x4"|col1 == "x5"| col1 > > == "x6", > > >> "prueba2", col1)) > > >> > > >> detach(df1) > > >> df1 > > >> > > >> pero ahora en vez de un df tengo varios > > >> > > >> col2 <- c('x12', 'x4', 'x6', 'x771','x4', 'x2') > > >> col3 <- c('x7', 'x2', 'x4', 'x5','x111', 'x1','x4', 'x5', > > 'x35','x2','x2', > > >> 'x4','x6', 'x5') > > >> df2<-data.frame(col2) > > >> df3<-data.frame(col3) > > >> > > >> ¿cómo puedo aplicar el código al resto de los df sin tener que > > repetirlo? > > >> > > >> > > >> > > >> [[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 > <https://stat.ethz.ch/mailman/listinfo/r-help-es> > > <https://stat.ethz.ch/mailman/listinfo/r-help-es > <https://stat.ethz.ch/mailman/listinfo/r-help-es>> > > >> > > > > > > > -- > > Marcelino de la Cruz Rot > > Depto. de Biología y Geología > > Física y Química Inorgánica > > Universidad Rey Juan Carlos > > Móstoles España > > > > _______________________________________________ > > R-help-es mailing list > > 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> > > <https://stat.ethz.ch/mailman/listinfo/r-help-es > <https://stat.ethz.ch/mailman/listinfo/r-help-es>> > > > -- > Marcelino de la Cruz Rot > Depto. de Biología y Geología > Física y Química Inorgánica > Universidad Rey Juan Carlos > Móstoles España > > _______________________________________________ > R-help-es mailing list > 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>-- Marcelino de la Cruz Rot Depto. de Biología y Geología Física y Química Inorgánica Universidad Rey Juan Carlos Móstoles España
Solucionado entonces, muchas gracias!!!! ________________________________ De: R-help-es <r-help-es-bounces en r-project.org> en nombre de Marcelino de la Cruz Rot <marcelino.delacruz en urjc.es> Enviado: jueves, 10 de septiembre de 2020 19:20 Para: David Mateos <porquewhich en hotmail.com> Cc: r-help-es en r-project.org <r-help-es en r-project.org> Asunto: Re: [R-es] aplicar codigo Ya s? a qu? se debe: En vuestro R, la funci?n data.frame transforma autom?ticamente los vectores de tipo /character/ a tipo/factor/. Con un factor, sapply devuelve el n?mero del nivel correspondiente: > col1 <- c('x1', 'x2', 'x11', 'x1','x33', 'x1','x4', 'x5', 'x35', 'x1','x2', 'x4') > sapply(col1, function(x) ifelse(x%in%c("x1","x2","x3"), "prueba12",ifelse(x%in%c("x4","x5","x6"),"prueba2",x))) x1 x2 x11 x1 x33 x1 x4 x5 x35 x1 x2 x4 "prueba12" "prueba12" "x11" "prueba12" "x33" "prueba12" "prueba2" "prueba2" "x35" "prueba12" "prueba12" "prueba2" > sapply(factor(col1), function(x) ifelse(x%in%c("x1","x2","x3"), "prueba12",ifelse(x%in%c("x4","x5","x6"),"prueba2",x))) [1] "prueba12" "prueba12" "2" "prueba12" "4" "prueba12" "prueba2" "prueba2" "5" "prueba12" "prueba12" "prueba2" > El 10/09/2020 a las 20:35, David Mateos escribi?:> Hola, > a m? me sucede como a Samura y no consigo entender de donde salen esos > "2", "4" y "5" para df1. ?Alguien puede arrojar luz? > Tanto con la versi?n 3.6 como con la 4.0.2 > > Si me funciona con > ``` > transforma <- function(df) { > apply(df, 1, function(x) > ifelse(x%in%c("x1","x2","x3"), > "prueba12", > ifelse(x%in%c("x4","x5","x6"), > "prueba2",x) > ) > ) > } > df1$transformacion <- transforma(df1) > ``` > Un saludo, > David > > Enviado desde Outlook <http://aka.ms/weboutlook> > > ------------------------------------------------------------------------ > *De:* R-help-es <r-help-es-bounces en r-project.org> en nombre de > Marcelino de la Cruz Rot <marcelino.delacruz en urjc.es> > *Enviado:* jueves, 10 de septiembre de 2020 19:15 > *Para:* Samura . <tontito82 en hotmail.com>; r-help-es en r-project.org > <r-help-es en r-project.org> > *Asunto:* Re: [R-es] aplicar codigo > Yo copio y pego este c?digo y me sale correctamente. Se me ocurre que > pueda deberse a la versi?n de R ?cu?l usas? > > > El 10/09/2020 a las 17:51, Samura . escribi?: > > Gracias por las respuestas. > > > > Prob? lo de hacer la funci?n y no me sal?a. Pensaba que hac?a algo mal. > > Ahora con el c?digo de Marcelino tampoco me sale. > > > > col1 <- c('x1', 'x2', 'x11', 'x1','x33', 'x1','x4', 'x5', 'x35', > > 'x1','x2', 'x4') > > col2 <- c('x12', 'x4', 'x6', 'x771','x4', 'x2') > > col3 <- c('x7', 'x2', 'x4', 'x5','x111', 'x1','x4', 'x5', > > 'x35','x2','x2', 'x4','x6', 'x5') > > > > df1<-data.frame(col1) > > df2<-data.frame(col2) > > df3<-data.frame(col3) > > > > transforma <- function(df) sapply(df, function(x) > > ifelse(x%in%c("x1","x2","x3"), > > "prueba12",ifelse(x%in%c("x4","x5","x6"),"prueba2",x))) > > > > transforma(df1) > > col1 > > [1,] "prueba12" > > [2,] "prueba12" > > [3,] "2" > > [4,] "prueba12" > > [5,] "4" > > [6,] "prueba12" > > [7,] "prueba2" > > [8,] "prueba2" > > [9,] "5" > > [10,] "prueba12" > > [11,] "prueba12" > > [12,] "prueba2" > > > > ?Alguna idea de pq me sale 2, 4, 5? > > ------------------------------------------------------------------------ > > *De:* R-help-es <r-help-es-bounces en r-project.org> en nombre de > > Marcelino de la Cruz Rot <marcelino.delacruz en urjc.es> > > *Enviado:* jueves, 10 de septiembre de 2020 9:36 > > *Para:* r-help-es en r-project.org <r-help-es en r-project.org> > > *Asunto:* Re: [R-es] aplicar codigo > > Hola: > > Como dice Carlos, algo as?, por ejemplo: > > > > transforma <- function(df) sapply(df, function(x) > > ifelse(x%in%c("x1","x2","x3"), > > "prueba1",ifelse(x%in%c("x4","x5","x6"),"prueba2",x))) > > > > > > > transforma(df1) > > col1 > > [1,] "prueba1" > > [2,] "prueba1" > > [3,] "x11" > > [4,] "prueba1" > > [5,] "x33" > > [6,] "prueba1" > > [7,] "prueba2" > > [8,] "prueba2" > > [9,] "x35" > > [10,] "prueba1" > > [11,] "prueba1" > > [12,] "prueba2" > > > > > > > transforma(df2) > > col2 > > [1,] "x12" > > [2,] "prueba2" > > [3,] "prueba2" > > [4,] "x771" > > [5,] "prueba2" > > [6,] "prueba1" > > > > > > > transforma(df3) > > col3 > > [1,] "x7" > > [2,] "prueba1" > > [3,] "prueba2" > > [4,] "prueba2" > > [5,] "x111" > > [6,] "prueba1" > > [7,] "prueba2" > > [8,] "prueba2" > > [9,] "x35" > > [10,] "prueba1" > > [11,] "prueba1" > > [12,] "prueba2" > > [13,] "prueba2" > > [14,] "prueba2" > > > > Saludos, > > > > Marcelino > > > > El 10/09/2020 a las 9:41, Carlos Ortega escribi?: > > > Hola, > > > Si lo estoy entendiendo bien, lo que tienes que crearte es una > funci?n. > > > A la funci?n le pasar?as unos par?metros (las columnas y el > dataframe al > > > que a?adir la transformaci?n), y en el cuerpo de la funci?n haces esos > > > c?lculos. > > > > > > Gracias, > > > Carlos. > > > > > > > > > > > > Gracias, > > > Carlos. > > > > > > El jue., 10 sept. 2020 a las 3:55, Samura . (<tontito82 en hotmail.com>) > > > escribi?: > > > > > >> Hola, > > >> me gustar?a hacer algo como en el siguiente ejemplo > > >> > > >> A un df a?adirle una columna que es la transformaci?n de otra, > > >> en plan a todo lo que sea x1, x2, x3 lo llamo prueba 1 > > >> todo lo que sea x4,x5,x6 lo llamo prueba 2 > > >> el resto de x las dejo como est?n. > > >> > > >> Ser?a algo as? > > >> > > >> col1 <- c('x1', 'x2', 'x11', 'x1','x33', 'x1','x4', 'x5', 'x35', > > >> 'x1','x2', 'x4') > > >> df1<-data.frame(col1) > > >> attach(df1) > > >> > > >> df1$transformacion<-ifelse(col1 == "x1"|col1 == "x2"| col1 == "x3", > > >> "prueba1", > > >> ifelse(col1 == "x4"|col1 == "x5"| col1 > > == "x6", > > >> "prueba2", col1)) > > >> > > >> detach(df1) > > >> df1 > > >> > > >> pero ahora en vez de un df tengo varios > > >> > > >> col2 <- c('x12', 'x4', 'x6', 'x771','x4', 'x2') > > >> col3 <- c('x7', 'x2', 'x4', 'x5','x111', 'x1','x4', 'x5', > > 'x35','x2','x2', > > >> 'x4','x6', 'x5') > > >> df2<-data.frame(col2) > > >> df3<-data.frame(col3) > > >> > > >> ?c?mo puedo aplicar el c?digo al resto de los df sin tener que > > repetirlo? > > >> > > >> > > >> > > >> [[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 > <https://stat.ethz.ch/mailman/listinfo/r-help-es> > > <https://stat.ethz.ch/mailman/listinfo/r-help-es > <https://stat.ethz.ch/mailman/listinfo/r-help-es>> > > >> > > > > > > > -- > > Marcelino de la Cruz Rot > > Depto. de Biolog?a y Geolog?a > > F?sica y Qu?mica Inorg?nica > > Universidad Rey Juan Carlos > > M?stoles Espa?a > > > > _______________________________________________ > > R-help-es mailing list > > 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> > > <https://stat.ethz.ch/mailman/listinfo/r-help-es > <https://stat.ethz.ch/mailman/listinfo/r-help-es>> > > > -- > Marcelino de la Cruz Rot > Depto. de Biolog?a y Geolog?a > F?sica y Qu?mica Inorg?nica > Universidad Rey Juan Carlos > M?stoles Espa?a > > _______________________________________________ > R-help-es mailing list > 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>-- Marcelino de la Cruz Rot Depto. de Biolog?a y Geolog?a F?sica y Qu?mica Inorg?nica Universidad Rey Juan Carlos M?stoles Espa?a _______________________________________________ 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]]
Que bueno! el famoso stringsAsFactors. Muchas gracias Marcelino, un saludo Enviado desde Outlook<http://aka.ms/weboutlook> ________________________________ De: Marcelino de la Cruz Rot <marcelino.delacruz en urjc.es> Enviado: jueves, 10 de septiembre de 2020 21:20 Para: David Mateos <porquewhich en hotmail.com> Cc: r-help-es en r-project.org <r-help-es en r-project.org> Asunto: Re: [R-es] aplicar codigo Ya s? a qu? se debe: En vuestro R, la funci?n data.frame transforma autom?ticamente los vectores de tipo /character/ a tipo/factor/. Con un factor, sapply devuelve el n?mero del nivel correspondiente: > col1 <- c('x1', 'x2', 'x11', 'x1','x33', 'x1','x4', 'x5', 'x35', 'x1','x2', 'x4') > sapply(col1, function(x) ifelse(x%in%c("x1","x2","x3"), "prueba12",ifelse(x%in%c("x4","x5","x6"),"prueba2",x))) x1 x2 x11 x1 x33 x1 x4 x5 x35 x1 x2 x4 "prueba12" "prueba12" "x11" "prueba12" "x33" "prueba12" "prueba2" "prueba2" "x35" "prueba12" "prueba12" "prueba2" > sapply(factor(col1), function(x) ifelse(x%in%c("x1","x2","x3"), "prueba12",ifelse(x%in%c("x4","x5","x6"),"prueba2",x))) [1] "prueba12" "prueba12" "2" "prueba12" "4" "prueba12" "prueba2" "prueba2" "5" "prueba12" "prueba12" "prueba2" > El 10/09/2020 a las 20:35, David Mateos escribi?:> Hola, > a m? me sucede como a Samura y no consigo entender de donde salen esos > "2", "4" y "5" para df1. ?Alguien puede arrojar luz? > Tanto con la versi?n 3.6 como con la 4.0.2 > > Si me funciona con > ``` > transforma <- function(df) { > apply(df, 1, function(x) > ifelse(x%in%c("x1","x2","x3"), > "prueba12", > ifelse(x%in%c("x4","x5","x6"), > "prueba2",x) > ) > ) > } > df1$transformacion <- transforma(df1) > ``` > Un saludo, > David > > Enviado desde Outlook <http://aka.ms/weboutlook> > > ------------------------------------------------------------------------ > *De:* R-help-es <r-help-es-bounces en r-project.org> en nombre de > Marcelino de la Cruz Rot <marcelino.delacruz en urjc.es> > *Enviado:* jueves, 10 de septiembre de 2020 19:15 > *Para:* Samura . <tontito82 en hotmail.com>; r-help-es en r-project.org > <r-help-es en r-project.org> > *Asunto:* Re: [R-es] aplicar codigo > Yo copio y pego este c?digo y me sale correctamente. Se me ocurre que > pueda deberse a la versi?n de R ?cu?l usas? > > > El 10/09/2020 a las 17:51, Samura . escribi?: > > Gracias por las respuestas. > > > > Prob? lo de hacer la funci?n y no me sal?a. Pensaba que hac?a algo mal. > > Ahora con el c?digo de Marcelino tampoco me sale. > > > > col1 <- c('x1', 'x2', 'x11', 'x1','x33', 'x1','x4', 'x5', 'x35', > > 'x1','x2', 'x4') > > col2 <- c('x12', 'x4', 'x6', 'x771','x4', 'x2') > > col3 <- c('x7', 'x2', 'x4', 'x5','x111', 'x1','x4', 'x5', > > 'x35','x2','x2', 'x4','x6', 'x5') > > > > df1<-data.frame(col1) > > df2<-data.frame(col2) > > df3<-data.frame(col3) > > > > transforma <- function(df) sapply(df, function(x) > > ifelse(x%in%c("x1","x2","x3"), > > "prueba12",ifelse(x%in%c("x4","x5","x6"),"prueba2",x))) > > > > transforma(df1) > > col1 > > [1,] "prueba12" > > [2,] "prueba12" > > [3,] "2" > > [4,] "prueba12" > > [5,] "4" > > [6,] "prueba12" > > [7,] "prueba2" > > [8,] "prueba2" > > [9,] "5" > > [10,] "prueba12" > > [11,] "prueba12" > > [12,] "prueba2" > > > > ?Alguna idea de pq me sale 2, 4, 5? > > ------------------------------------------------------------------------ > > *De:* R-help-es <r-help-es-bounces en r-project.org> en nombre de > > Marcelino de la Cruz Rot <marcelino.delacruz en urjc.es> > > *Enviado:* jueves, 10 de septiembre de 2020 9:36 > > *Para:* r-help-es en r-project.org <r-help-es en r-project.org> > > *Asunto:* Re: [R-es] aplicar codigo > > Hola: > > Como dice Carlos, algo as?, por ejemplo: > > > > transforma <- function(df) sapply(df, function(x) > > ifelse(x%in%c("x1","x2","x3"), > > "prueba1",ifelse(x%in%c("x4","x5","x6"),"prueba2",x))) > > > > > > > transforma(df1) > > col1 > > [1,] "prueba1" > > [2,] "prueba1" > > [3,] "x11" > > [4,] "prueba1" > > [5,] "x33" > > [6,] "prueba1" > > [7,] "prueba2" > > [8,] "prueba2" > > [9,] "x35" > > [10,] "prueba1" > > [11,] "prueba1" > > [12,] "prueba2" > > > > > > > transforma(df2) > > col2 > > [1,] "x12" > > [2,] "prueba2" > > [3,] "prueba2" > > [4,] "x771" > > [5,] "prueba2" > > [6,] "prueba1" > > > > > > > transforma(df3) > > col3 > > [1,] "x7" > > [2,] "prueba1" > > [3,] "prueba2" > > [4,] "prueba2" > > [5,] "x111" > > [6,] "prueba1" > > [7,] "prueba2" > > [8,] "prueba2" > > [9,] "x35" > > [10,] "prueba1" > > [11,] "prueba1" > > [12,] "prueba2" > > [13,] "prueba2" > > [14,] "prueba2" > > > > Saludos, > > > > Marcelino > > > > El 10/09/2020 a las 9:41, Carlos Ortega escribi?: > > > Hola, > > > Si lo estoy entendiendo bien, lo que tienes que crearte es una > funci?n. > > > A la funci?n le pasar?as unos par?metros (las columnas y el > dataframe al > > > que a?adir la transformaci?n), y en el cuerpo de la funci?n haces esos > > > c?lculos. > > > > > > Gracias, > > > Carlos. > > > > > > > > > > > > Gracias, > > > Carlos. > > > > > > El jue., 10 sept. 2020 a las 3:55, Samura . (<tontito82 en hotmail.com>) > > > escribi?: > > > > > >> Hola, > > >> me gustar?a hacer algo como en el siguiente ejemplo > > >> > > >> A un df a?adirle una columna que es la transformaci?n de otra, > > >> en plan a todo lo que sea x1, x2, x3 lo llamo prueba 1 > > >> todo lo que sea x4,x5,x6 lo llamo prueba 2 > > >> el resto de x las dejo como est?n. > > >> > > >> Ser?a algo as? > > >> > > >> col1 <- c('x1', 'x2', 'x11', 'x1','x33', 'x1','x4', 'x5', 'x35', > > >> 'x1','x2', 'x4') > > >> df1<-data.frame(col1) > > >> attach(df1) > > >> > > >> df1$transformacion<-ifelse(col1 == "x1"|col1 == "x2"| col1 == "x3", > > >> "prueba1", > > >> ifelse(col1 == "x4"|col1 == "x5"| col1 > > == "x6", > > >> "prueba2", col1)) > > >> > > >> detach(df1) > > >> df1 > > >> > > >> pero ahora en vez de un df tengo varios > > >> > > >> col2 <- c('x12', 'x4', 'x6', 'x771','x4', 'x2') > > >> col3 <- c('x7', 'x2', 'x4', 'x5','x111', 'x1','x4', 'x5', > > 'x35','x2','x2', > > >> 'x4','x6', 'x5') > > >> df2<-data.frame(col2) > > >> df3<-data.frame(col3) > > >> > > >> ?c?mo puedo aplicar el c?digo al resto de los df sin tener que > > repetirlo? > > >> > > >> > > >> > > >> [[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 > <https://stat.ethz.ch/mailman/listinfo/r-help-es> > > <https://stat.ethz.ch/mailman/listinfo/r-help-es > <https://stat.ethz.ch/mailman/listinfo/r-help-es>> > > >> > > > > > > > -- > > Marcelino de la Cruz Rot > > Depto. de Biolog?a y Geolog?a > > F?sica y Qu?mica Inorg?nica > > Universidad Rey Juan Carlos > > M?stoles Espa?a > > > > _______________________________________________ > > R-help-es mailing list > > 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> > > <https://stat.ethz.ch/mailman/listinfo/r-help-es > <https://stat.ethz.ch/mailman/listinfo/r-help-es>> > > > -- > Marcelino de la Cruz Rot > Depto. de Biolog?a y Geolog?a > F?sica y Qu?mica Inorg?nica > Universidad Rey Juan Carlos > M?stoles Espa?a > > _______________________________________________ > R-help-es mailing list > 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>-- Marcelino de la Cruz Rot Depto. de Biolog?a y Geolog?a F?sica y Qu?mica Inorg?nica Universidad Rey Juan Carlos M?stoles Espa?a [[alternative HTML version deleted]]