2010-12-02 13 views
5

Me gustaría indicar los nombres de salida de fila/col en una función **ply, ldply, desde el paquete plyr.¿Cómo puedo cambiar el nombre de las filas/columnas de salida de las funciones ** ply de plyr?

por ejemplo,

Tengo una lista, foo, que quiero convertir a un data.frame y truncar dígitos significativos con signif()

foo <- list(var.a = runif(3), var.b = runif(3), var.c=runif(3)) 

Lo que tenemos ahora es

q <- ldply(foo, signif, 2) 
colnames(dq)[1] <- c('id', 'q1', 'q2','q3') 
rownames(dq) <- dq$id 

¿Hay alguna manera más fácil?

Dos preguntas anteriores han preguntado cómo usar plyr para cambiar el nombre de rows y cols utilizando plyr, pero creo que mi pregunta es diferente. ¿Se pueden indicar los nombres al mismo tiempo que otra función (o si estoy haciendo esto correctamente)? ¿Es esta una solicitud de función que vale la pena?

Respuesta

6

usted tiene que dar nombres en alguna parte, ya sea en la función de ser llamado por dentro como por ejemplo, en

R> ldply(foo, function(l) c(a=signif(l[1], 2), b=signif(l[2], 2), 
+       c=signif(l[3], 2))) 
    .id a b c 
1 var.a 0.50 0.72 0.27 
2 var.b 0.82 0.38 0.24 
3 var.c 0.13 0.27 0.81 
R> 

o se le hizo después de la llamada.

Otra opción que uso con frecuencia es crear explícitamente una fila data.frame en la función de trabajo anónimo. *dply() et al luego simplemente cotejaron estos en un solo data.frame. Eso funciona lo suficientemente bien para mi gusto.

+0

¿Te importaría publicar un ejemplo de tu opción 2? Parece útil, pero no entiendo intuitivamente cómo funcionaría. Gracias. – kmm

+0

Véase, por ejemplo, mi respuesta anterior aquí: http://stackoverflow.com/questions/3277326/group-by-in-r-ddply-with-weighted-mean y, en general, intente buscar el formulario "[r] somet" buscar 'someterm' dentro de las etiquetas R en StackOverflow. Acabo de hacer 'ddply' y los primeros dos hits fueron ganadores. –

+0

Gracias. No había pensado buscar una respuesta similar en SO. – kmm

Cuestiones relacionadas