[R-es] funcion en data.frame

Carlos J. Gil Bellosta cgb en datanalytics.com
Lun Sep 26 13:13:11 CEST 2011


Yo creo que te vendría bien echarle un vistazo a

http://www.jstatsoft.org/v40/i01

El artículo trata sobre un paquete, plyr, que está diseñado para
implementar la estrategia "divide-aplica-combina":

1) Primero divides tu problema en trozos (¿por persona?)
2) Solucionas tu problema para cada trozo.
3) Aplicas la solución a cada trozo y recompones la estructura de
datos deseada con los resultados.

Un saludo,

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



El día 26 de septiembre de 2011 05:13, Javier Rubén Marcuzzi
<javier.ruben.marcuzzi en gmail.com> escribió:
> Hola
>
> Nuevamente necesito ayuda de ustedes, en muy pocas oportunidades escribí una función, diría que no tengo experiencia al respecto.
>
> Escribo el código en R (copiar y pegar) con los comentarios y descripción de los datos.
>
> Esperando que se entienda  ...
>
> #######################################################
> #    Descricion de los datos (en orden de columnas)
> #   5 Personas que realizan una actividad,
> #   por cada vez que se realiza se la numera
> #   cada actividad numerada es realizada a x dias desde
> #   la columna dias2 es generada para no tener blancos (vacíos)
>
> persona<-c(1,1,1,1,1,2,2,2,2,2,3,3,3,4,5,5)
> numeracion <-c(1,2,3,4,5,1,2,3,4,5,1,2,3,1,1,2)
> dias <-c(1,3,4,6,9,2,4,6,7,9,2,5,8,3,5,8)
> dias2 <- c(1:length(dias))
> datos <- data.frame(persona, numeracion, dias, dias2)
> datos
>
> #    descripción de lo que debería realizar
> #    observar la columna dias2
> #    cambia el primer valor y los ultimos (15 y 16)
> datos$dias2[datos$dias2 < max(datos$dias2)] <- datos$dias2[-1]
> datos$dias2[datos$dias2 == max(datos$dias2)] <- NA
> datos
> #   al observar las columnas días y días2 me es fácil restar
> #   entre ambas columnas para obtener la diferencia de tiempo
>
> ###########
> #   Mi problema
> #   lo descripto anteriormente debe tomar el valor maximo de cada
> #   persona, no el maximo de todo el data.frame
> #   (un max por persona)  y    (un [-1] por persona)
>
>
> #  intente vosas como:
> #   probar <- do.call(rbind, by(datos, datos$persona, datos$dias, function(x){...
> #   todos intentos que no fueron correctos
>
> #   ¿Me explico? ¿Ideas?
>        [[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