Hola Manu,

Si "x" es tu conjunto de datos, esta es una forma de obtener lo que
necesitas:

r <- with(x, tapply(idProducto, idVisita, function(x) if(length(x) >1)
combn(x, 2)))
do.call(rbind, sapply(r[!sapply(r, is.null)], t))
 #       [,1] [,2]
 #[1,]   12   18
 #[2,]   12   21
 #[3,]   18   21
 #[4,]   13   18
 #[5,]   13   09
 #[6,]   13   21
 #[7,]   18   09
 #[8,]   18   21
 #[9,]   09   21
 [10,]   21   14

Saludos,
Jorge.-





2013/7/10 Manu Rdrgz <manu.rdrgz@gmail.com>

> hola,
>
> casi recien llegado a r, esta es mi primera participación en la lista,
> aunque me han servido bastante entradas anteriores. gracias a todos.
>
> tengo un problema al generar una determinada estructura de datos. A ver si
> alguien me puede ayudar.
>
> tengo un dataframe con información de visitas y productos de una web. En
> cada visita se pueden hacer varias transacciones comprando varios productos
> en la misma visita. La estructura sería aprox. la siguiente:
>
> idVisita          idProducto
> 1                        12
> 1                         18
> 1                         21
> 2                         13
> 2                         18
> 2                         09
> 2                         21
> 3                         12
> 4                         21
> 4                         14
>
> me gustaría poder ver cómo se relacionan los diferentes productos entre sí
> (típico cross-selling) visualizandolo mediante una red. Para ello, necesito
> una estructura que tenga el típico source y target para generar la arista.
>
> para los datos anteriores el resultado sería:
>
> Source           Target
> 12                     18
> 12                     21
> 18                     21
> 13                     18
> 13                     09
> 13                     21
> 18                     09
> 18                     21
> 09                     21
> 21                     14
>
> la idea sería ir creando todos los pares de valores posibles de la columna
> idProducto según los valores en la columna idVisita. Por ejemplo, la visita
> 3 no genera pares de valores, pero la visita 2 genera 6 (se podría eliminar
> de antemao los valores que no generen arista).
>
> a alguien se le ocurre cómo poder hacer esto con r? o de cualquier otra
> forma?
>
> cualquier ayuda o referencia será más que bienvenida :)
>
> gracias por adelantado.
>
> saludos,
>
> manu
>
>         [[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]]

