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]]