2011-07-28 10 views
9

Używam ddply do agregowania moich danych, ale nie znalazłem eleganckiego sposobu na przypisanie nazw kolumn do ramki danych wyjściowych.ddply zagregowane nazwy kolumn

Obecnie robie to:

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

i to

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

Czy istnieje lepszy, bardziej elegancki sposób to zrobić?

+0

Możesz również chcieć spojrzeć na 'count' – hadley

Odpowiedz

8

Można użyć summarise:

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

lub użyć length(<column_name>) jeśli nrow(piece) nie działa. Na przykład, oto przykład, który powinien być uruchamialny przez nikogo:

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

lub

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

EDIT

Albo jak Joshua uwag wersja wszystkie czapki, NROW robi sprawdzanie ty.

+1

' NROW' wykonuje niezbędne sprawdzenie. –

+0

@Joshua - Wow, dzięki, nie mogę uwierzyć, że nie wiedziałem o tym ... – joran

+1

który działa ładnie; Nie wiedziałem o zmiennej 'piece'. Czy masz pojęcie, jak to działa, gdy już korzystam z funkcji colwise? Dodałem drugi przykład do powyższego pytania. – behas

9

Ogólna forma używam dużo jest:

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

używam funkcji anonimowych w moich ddply sprawozdania niemal cały czas, więc powyższe idiom zazębia się dobrze z funkcji anonimowych. Nie jest to najbardziej zwięzły sposób wyrażenia funkcji takiej jak nrow(), ale z funkcjami, w których przekazuję wiele argumentów, bardzo mi się podoba.