2009-09-08 12 views
11

Hadley przekazała mi pakiet plyr i cały czas używam go do robienia "grupowania". Ale ja znajduję się konieczności zawsze zmienić nazwę powstałych kolumn ponieważ domyślnie V1, V2, itpzmiana nazwy kolumny wyjściowej za pomocą pakietu plyr w R

Oto przykład:

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") 

Czy istnieje sposób, aby ddply wymienić wynikowy kolumnę dla mnie tak Mogę pominąć tę ostatnią linię?

+0

JD- To pierwsza linia kodu nie działa, powinno być rnorm (..., 72 , 2), np .: mydata <-data.frame (macierz (rnorm (144, średnia = 2, sd = 2), 72,2), c (rep ("A", 24), rep ("B ", 24), rep (" C ", 24)))" – medriscoll

+0

dobry połów! Edytowałem mój przykład. Dzięki! –

Odpowiedz

10

To wydaje się działać:

> 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

Pomagam w składni R, nie rozumiejąc jej. Dlaczego, na litość, potrzebna jest funkcja concatenate? – Farrel

+0

@Farrel: Aby nadać elementowi danych nazwę. Używanie 'data.frame' również działa. – krlmlr

19

Zastosowanie podsumowania (lub podsumowanie):

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

to doskonały sposób na rozwiązanie tego problemu. Wybrałem odpowiedź Chrisa tylko dlatego, że jest bardziej ogólna. Użyję jego metody i twojej w przyszłości. Chciałbym móc je połączyć lub zaakceptować zarówno –

+1

Moja metoda jest w rzeczywistości nieco bardziej ogólna (ponieważ jeśli zwrócisz wiele typów, mogą mieć różne typy). Napisałem podsumowanie dla dokładnie tego zastosowania. – hadley

+0

Nie mogę uzyskać tej metody pracy dla mnie, ponieważ używam funkcji nrow, aby zsumować liczbę wierszy w podzbiór danych, wszelkie wskazówki? –

Powiązane problemy