2011-07-28 15 views
9

Estoy usando ddply para agregar mis datos pero no he encontrado una manera elegante de asignar nombres de columna al marco de datos de salida.ddply nombres de columna agregados

En el momento que estoy haciendo esto:

agg_data <- ddply(raw_data, .(id, date, classification), nrow) 
names(agg_data)[4] <- "no_entries" 

y esto

agg_data <- ddply(agg_data, .(classification, date), colwise(mean, .(no_entries))) 
names(agg_data)[3] <- "avg_no_entries" 

¿Existe una forma mejor y más elegante de hacer esto?

+0

Es posible que también desee ver 'count' – hadley

Respuesta

8

Puede utilizar summarise:

agg_data <- ddply(raw_data, .(id, date, classification), summarise, "no_entries" = nrow(piece)) 

o puede utilizar length(<column_name>) si nrow(piece) no funciona. Por ejemplo, aquí hay un ejemplo que debe ser ejecutable por cualquier persona:

ddply(baseball, .(year), summarise, newColumn = nrow(piece)) 

o

ddply(baseball, .(year), summarise, newColumn = length(year)) 

EDITAR

O como comentarios Joshua, la versión de todos los casquillos, NROW hace la comprobación de tú.

+1

' NROW' hace la verificación necesaria para usted. –

+0

@Joshua - Vaya, gracias, no puedo creer que no supiera de eso ... – joran

+1

que funciona bien; No estaba al tanto de la variable 'pieza '. ¿Tiene alguna idea de cómo funciona cuando ya uso la función colwise? Agregué un segundo ejemplo a la pregunta anterior. – behas

9

La forma genérica utilizo mucho es:

ddply(raw_data, .(id, date, classification), function(x) data.frame(no_entries=nrow(x)) 

utilizo en mis funciones anónimas ddply declaraciones casi todo el tiempo por lo que el lenguaje anterior se articule con funciones anónimas. Esta no es la forma más concisa de expresar una función como nrow() pero con funciones donde paso múltiples argumentos, me gusta mucho.