[R-es] Ampliar data.frame con datos del propio data.frame

Carlos J. Gil Bellosta cgb en datanalytics.com
Jue Dic 5 13:22:16 CET 2013


Hola, ¿qué tal?

Lo que quieres es un "left join". Usa merge.

Un saludo,

Carlos J. Gil Bellosta
http://www.datanalytics.com

El día 5 de diciembre de 2013 13:08, Alberto Soria
<alberto.soria en ari-solar.es> escribió:
> ¡Hola a todos!
>
> Tengo el siguiente data.frame:
>
> p <-
> data.frame(id=c(1:6),cara=c(1,0,0,1,0,0),anterior=c(0,1,2,0,4,5),siguiente=c(2,3,0,5,6,0),superficie=c(1,2,0,1,2,0))
>
> En realidad es muchísimo más grande, pero creo que las primeras filas
> servirán para explicar mi problema.
>
> El data.frame contiene los puntos de intersección entre fotones y
> superficies. Dichos puntos están identificados con el campo "id". Por otro
> lado, el campo "siguiente" indica cual es el id de la siguiente
> intersección. Mi problema es que necesito crear una nueva columna llamada,
> por ejemplo, superficie_siguiente, que indique cual será la superficie de
> la siguiente intersección. Cuando la "siguiente" es igual a 0 significa que
> no hay nuevas intersecciones y se pondría en superficie_siguiente, por
> ejemplo NA.
>
> Lo he hecho con el siguiente bucle, pero es lentísimo.
>
> surface_n <- function(p,p.s,n) {
>   if(p[n,]$siguiente != 0) p.s[n,]$superficie_siguiente <-
> p[p$id==p[n,]$siguiente,]$superficie
>   return(p.s)
> }
>
> p.s <- cbind(p,superficie_siguiente = rep(NA,dim(p)[1]))
>
> for(n in 1:dim(p)[1]) {
>   p.s <- surface_n(p,p.s,n)
> }
>
> ¿Alguna idea de cómo se puede hacer esto más rápido?
>
> Gracias por adelantado,
> Alberto.
>
>         [[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
>



Más información sobre la lista de distribución R-help-es