Patricio Fuenmayor Viteri
2015-Jul-10 00:55 UTC
[R-es] data.table: crear variable por loop
Hola a todos.Al parecer aun soy muy novato usando data.tables. Necesito crear un proceso reiterativo, comparando un valor que está en una lista, con todos los datos de una columna.Me explico. Tengo una lista de los dominios de emails que son correctos, y necesito medir la distancia de textos (funcion stringdist), con los dominios que tengo en una base de datos. Pero como la lista de los emails es variable, necesito un bucle que haga esta comparación en data.tables: dmn02 <- c("HOTMAIL.COM","DOMINIO.COM","GMAIL.COM","YAHOO.COM","HOTMAIL.ES") for(i in 1:length(dmn02)){email05[,":="(as.name(dmn02[i])=stringdist(dmn02[i],DOMAIN))]} no me reconoce la asignación al nombre de la variable... lo que debería hacer, reemplazando el valor de dmn02email05[,":="("HOTMAIL.COM"=stringdist("HOTMAIL.COM",DOMAIN))]para el valor de i=1 Gracias por su ayuda. [[alternative HTML version deleted]]
Hola, No sé si ya tienes resuelta esta duda. Si es que no, espero que lo siguiente pueda ayudar. Antes de pasar a cómo incluir el resultado de la comparación con "stringdist()" en el data.table, quería alertarte de que el resultado de la comparación de "stringdist()" será un vector y no un único valor. La longitud del vector resultante será igual a la longitud del vector con el comparas tu dirección de correo, esto es, la longitud de tu vector "DOMAIN". Mira este ejemplo: #----------------------> x = 'hello' > y = c('world!', 'hello', 'this', 'is', 'foobar') > stringdist(x,y)[1] 5 0 5 5 6 #---------------------- Entiendo que lo querrás es elegir la cadena de tu "DOMAIN" más próxima a tu correo. Pero puede ocurrir que salvo que sea idéntica (distancia 0), puede haber varias cadenas que tengan una distancia equivalente (en el ejemplo hay tres cadenas cuya distancia es 5). Mi recomendación es que primero apliques "stringdist()" por separado a tu lista de correos y tu lista de referencia (DOMAIN), para ver bien el resultado que obtienes y luego este resultado (entiendo que será un único valor) lo incorpores al data.table. Saludos, Carlos Ortega www.qualityexcellence.es El 10 de julio de 2015, 2:55, Patricio Fuenmayor Viteri < patricio.fuenmayor en outlook.com> escribió:> Hola a todos.Al parecer aun soy muy novato usando data.tables. Necesito > crear un proceso reiterativo, comparando un valor que está en una lista, > con todos los datos de una columna.Me explico. Tengo una lista de los > dominios de emails que son correctos, y necesito medir la distancia de > textos (funcion stringdist), con los dominios que tengo en una base de > datos. Pero como la lista de los emails es variable, necesito un bucle que > haga esta comparación en data.tables: > dmn02 <- c("HOTMAIL.COM","DOMINIO.COM","GMAIL.COM","YAHOO.COM","HOTMAIL.ES > ") > for(i in 1:length(dmn02)){email05[,":="(as.name > (dmn02[i])=stringdist(dmn02[i],DOMAIN))]} > no me reconoce la asignación al nombre de la variable... > lo que debería hacer, reemplazando el valor de dmn02email05[,":="(" > HOTMAIL.COM"=stringdist("HOTMAIL.COM",DOMAIN))]para el valor de i=1 > Gracias por su ayuda. > > [[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]]