Hola a todos, Os pongo aquí debajo un pequeño fragmento de código. Resulta que dispongo de una CADENA que tiene dos columnas. Una con palabras y la otra que dice si es bueno o malo. En otra variable tengo una LISTA. Quiero cruzar todas las palabras de la lista con todas las de la cadena y cuando alguna coincida, que me indique en qué fila está y también si la palabra es "buena" o "mala". El código que os pongo más abajo funciona, pero es poco eficiente cuando las listas son más largas. Se os ocurre otra forma de programarlo más elegantemente en R. CADENA_1<-c("caliente","frío","gordo","flaco")CADENA_2<-c("bueno","malo","bueno","malo")CADENA<-rbind(CADENA_1,CADENA_2)CADENA<-t(CADENA)LISTA<-c("caliente","perro","flaco","gato","coche") for (i in 1:nrow(CADENA)) {for (j in 1:length(LISTA)) {if(toString(LISTA[j])==toString(CADENA[i,1])) {print(paste("fila:",j,CADENA[i,2],sep=" "))}}} Un saludo y muchas gracias a todos. [[alternative HTML version deleted]]
Hola, Esta es una forma...> str_1 <- c("caliente","frío","gordo","flaco") > str_2 <- c("bueno","malo","bueno","malo") > str_3 <- cbind(str_1, str_2) > > l_val <- c("caliente","perro","flaco","gato","coche") > > row_god <- which(l_val %in% str_3[,1], arr.ind = TRUE ) > row_god[1] 1 3 Saludos, Carlos Ortega www.qualityexcellence.es El 6 de febrero de 2018, 23:15, Fernando Sanchez via R-help-es < r-help-es en r-project.org> escribió:> Hola a todos, > Os pongo aquí debajo un pequeño fragmento de código. Resulta que dispongo > de una CADENA que tiene dos columnas. Una con palabras y la otra que dice > si es bueno o malo. En otra variable tengo una LISTA. Quiero cruzar todas > las palabras de la lista con todas las de la cadena y cuando alguna > coincida, que me indique en qué fila está y también si la palabra es > "buena" o "mala". El código que os pongo más abajo funciona, pero es poco > eficiente cuando las listas son más largas. > Se os ocurre otra forma de programarlo más elegantemente en R. > > CADENA_1<-c("caliente","frío","gordo","flaco")CADENA_2<-c(" > bueno","malo","bueno","malo")CADENA<-rbind(CADENA_1,CADENA_ > 2)CADENA<-t(CADENA)LISTA<-c("caliente","perro","flaco","gato","coche") > for (i in 1:nrow(CADENA)) {for (j in 1:length(LISTA)) > {if(toString(LISTA[j])==toString(CADENA[i,1])) > {print(paste("fila:",j,CADENA[i,2],sep=" "))}}} > Un saludo y muchas gracias a todos. > [[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]]
Esta es otra forma: CADENA_1<-c("caliente","frío","gordo","flaco") CADENA_2<-c("bueno","malo","bueno","malo") CADENA<-rbind(CADENA_1,CADENA_2) CADENA<-t(CADENA) LISTA<-c("caliente","perro","flaco","gato","coche") # ------- CADENA <- CADENA_2 names(CADENA) <- CADENA_1 CADENA[LISTA] -> RESULTADO RESULTADO[!is.na(RESULTADO)] On 07/02/18 03:57, Carlos Ortega wrote:> Hola, > > Esta es una forma... > >> str_1 <- c("caliente","frío","gordo","flaco") >> str_2 <- c("bueno","malo","bueno","malo") >> str_3 <- cbind(str_1, str_2) >> >> l_val <- c("caliente","perro","flaco","gato","coche") >> >> row_god <- which(l_val %in% str_3[,1], arr.ind = TRUE ) >> row_god > [1] 1 3 > > Saludos, > Carlos Ortega > www.qualityexcellence.es > > > El 6 de febrero de 2018, 23:15, Fernando Sanchez via R-help-es < > r-help-es en r-project.org> escribió: > >> Hola a todos, >> Os pongo aquí debajo un pequeño fragmento de código. Resulta que dispongo >> de una CADENA que tiene dos columnas. Una con palabras y la otra que dice >> si es bueno o malo. En otra variable tengo una LISTA. Quiero cruzar todas >> las palabras de la lista con todas las de la cadena y cuando alguna >> coincida, que me indique en qué fila está y también si la palabra es >> "buena" o "mala". El código que os pongo más abajo funciona, pero es poco >> eficiente cuando las listas son más largas. >> Se os ocurre otra forma de programarlo más elegantemente en R. >> >> CADENA_1<-c("caliente","frío","gordo","flaco")CADENA_2<-c(" >> bueno","malo","bueno","malo")CADENA<-rbind(CADENA_1,CADENA_ >> 2)CADENA<-t(CADENA)LISTA<-c("caliente","perro","flaco","gato","coche") >> for (i in 1:nrow(CADENA)) {for (j in 1:length(LISTA)) >> {if(toString(LISTA[j])==toString(CADENA[i,1])) >> {print(paste("fila:",j,CADENA[i,2],sep=" "))}}} >> Un saludo y muchas gracias a todos. >> [[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 >> > >-- +-------------------------------------------------------------- | Francisco J. Viciana Fernández | Dpto. Indicadores Demográficos | Servicio de Estadísticas Demográficas y Sociales | Instituto de Estadística y Cartografía de Andalucía | Leonardo Da Vinci, nº 21. Isla de La Cartuja. | 41071 SEVILLA. | franciscoj.viciana en juntadeandalucia.es +-------------------------------------------------------------- ------------ próxima parte ------------ A non-text attachment was scrubbed... Name: franciscoj_viciana.vcf Type: text/x-vcard Size: 4 bytes Desc: no disponible URL: <https://stat.ethz.ch/pipermail/r-help-es/attachments/20180207/72c0ccf3/attachment-0001.vcf>
Estimado Fernando Sanchez Creo que son buenas las ayudas que te han brindado, pero aparte de estas siempre puedes realizar una compilación de un código que no está optimizado, puedes ver el siguiente hipervínculo http://homepage.divms.uiowa.edu/~luke/R/compiler/compiler.pdf Javier Rubén Marcuzzi El 6 de febrero de 2018, 19:15, Fernando Sanchez via R-help-es < r-help-es en r-project.org> escribió:> Hola a todos, > Os pongo aquí debajo un pequeño fragmento de código. Resulta que dispongo > de una CADENA que tiene dos columnas. Una con palabras y la otra que dice > si es bueno o malo. En otra variable tengo una LISTA. Quiero cruzar todas > las palabras de la lista con todas las de la cadena y cuando alguna > coincida, que me indique en qué fila está y también si la palabra es > "buena" o "mala". El código que os pongo más abajo funciona, pero es poco > eficiente cuando las listas son más largas. > Se os ocurre otra forma de programarlo más elegantemente en R. > > CADENA_1<-c("caliente","frío","gordo","flaco")CADENA_2<-c(" > bueno","malo","bueno","malo")CADENA<-rbind(CADENA_1,CADENA_ > 2)CADENA<-t(CADENA)LISTA<-c("caliente","perro","flaco","gato","coche") > for (i in 1:nrow(CADENA)) {for (j in 1:length(LISTA)) > {if(toString(LISTA[j])==toString(CADENA[i,1])) > {print(paste("fila:",j,CADENA[i,2],sep=" "))}}} > Un saludo y muchas gracias a todos. > [[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,Muchas gracias por las propuestas. He probado las tres y han funcionado perfectamente.saludos,Fernando De: Javier Marcuzzi <javier.ruben.marcuzzi en gmail.com> Para: Fernando Sanchez <fernandsanche en yahoo.es> CC: "r-help-es en r-project.org" <r-help-es en r-project.org> Enviado: Miércoles 7 de febrero de 2018 13:46 Asunto: Re: [R-es] Optimizar código Estimado Fernando Sanchez Creo que son buenas las ayudas que te han brindado, pero aparte de estas siempre puedes realizar una compilación de un código que no está optimizado, puedes ver el siguiente hipervínculo http://homepage.divms.uiowa.edu/~luke/R/compiler/compiler.pdf Javier Rubén Marcuzzi El 6 de febrero de 2018, 19:15, Fernando Sanchez via R-help-es <r-help-es en r-project.org> escribió: Hola a todos, Os pongo aquí debajo un pequeño fragmento de código. Resulta que dispongo de una CADENA que tiene dos columnas. Una con palabras y la otra que dice si es bueno o malo. En otra variable tengo una LISTA. Quiero cruzar todas las palabras de la lista con todas las de la cadena y cuando alguna coincida, que me indique en qué fila está y también si la palabra es "buena" o "mala". El código que os pongo más abajo funciona, pero es poco eficiente cuando las listas son más largas. Se os ocurre otra forma de programarlo más elegantemente en R. CADENA_1<-c("caliente","frío", "gordo","flaco")CADENA_2<-c(" bueno","malo","bueno","malo") CADENA<-rbind(CADENA_1,CADENA_ 2)CADENA<-t(CADENA)LISTA<-c(" caliente","perro","flaco"," gato","coche") for (i in 1:nrow(CADENA)) {for (j in 1:length(LISTA)) {if(toString(LISTA[j])== toString(CADENA[i,1])) {print(paste("fila:",j,CADENA[ i,2],sep=" "))}}} Un saludo y muchas gracias a todos. [[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]]