2009-09-08 11 views
11

Hadley me pasó al paquete plyr y me encuentro usando todo el tiempo para hacer cosas como 'agrupar'. Pero me encuentro tener que cambiar el nombre siempre las columnas resultantes, ya que por defecto a V1, V2, etc.renombrando la columna de salida con el paquete plyr en R

He aquí un ejemplo:

mydata<-data.frame(matrix(rnorm(144, mean=2, sd=2),72,2),c(rep("A",24),rep("B",24),rep("C",24))) 
colnames(mydata) <- c("x_value", "acres", "state") 
groupAcres <- ddply(mydata, c("state"), function(df)c(sum(df$acres))) 
colnames(groupAcres) <- c("state","stateAcres") 

¿Hay una manera de hacer ddply el nombre de la columna resultante para mí, así Puedo omitir esa última línea?

+0

JD-Que la primera línea de código no se ejecuta, debe ser rnorm (..., 72 , 2), p. Ej .: mydata <-data.frame (matriz (rnorm (144, mean = 2, sd = 2), 72,2), c (rep ("A", 24), rep ("B ", 24), rep (" C ", 24))) ' – medriscoll

+0

¡Buena captura! Edité mi ejemplo. ¡Gracias! –

Respuesta

10

Esto parece funcionar:

> groupAcres <- ddply(mydata, c("state"), function(df) c(myName=sum(df$acres))) 
> groupAcres 
    state myName 
1  A 56.87973 
2  B 57.84451 
3  C 52.82415 
+5

Me confundo con la sintaxis R sin entenderlo realmente. ¿Por qué uno necesita la función de concatenación? – Farrel

+0

@Farrel: para dar un nombre al elemento de datos. Usar 'data.frame' también funciona. – krlmlr

19

Uso resumen (o resumen):

groupAcres <- ddply(mydata, "state", summarise, 
    myName = sum(acres)) 
+0

que es una excelente manera de resolver esto. Elegí la respuesta de Chris solo porque es más general. Usaré su método y el tuyo en el futuro. Desearía poder combinarlos o aceptarlos. –

+1

Mi método es un poco más general (porque si devuelves varios tipos pueden tener diferentes tipos). Escribí un resumen para exactamente este uso. – hadley

+0

No consigo que este método funcione para mí porque estoy usando la función nrow para sumar el número de filas en los datos subconjuntos, ¿algún consejo? –

Cuestiones relacionadas