2009-09-08 6 views
11

Hadley mi ha attivato il pacchetto plyr e mi ritrovo ad usarlo tutto il tempo per eseguire "raggruppa per" una sorta di roba. Ma mi trovo a dover rinominare sempre le colonne risultanti dal momento che di default a V1, V2, eccrinominare la colonna di output con il pacchetto plyr in R

Ecco un esempio:

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

C'è un modo per rendere ddply nominare la colonna risultante per me così Posso omettere quell'ultima riga?

+0

JD- Quella prima riga di codice non viene eseguito, dovrebbe essere RNorm (..., 72 , 2), ad es .: mydata <-data.frame (matrice (rnorm (144, mean = 2, sd = 2), 72,2), c (rep ("A", 24), rep ("B ", 24), rep (" C ", 24))) ' – medriscoll

+0

buona cattura! Ho modificato il mio esempio. Grazie! –

risposta

10

Questo sembra funzionare:

> 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

Mi confondo con la sintassi R senza realmente capirlo. Perché mai ci vuole la funzione di concatenazione? – Farrel

+0

@Destro: per assegnare un nome all'elemento dati. L'uso di 'data.frame' funziona come bene. – krlmlr

19

Usa riassumere (o riassumere):

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

questo è un ottimo modo per risolvere questo. Ho scelto la risposta di Chris solo perché è più generale. Userò sia il suo metodo che il tuo in futuro. Vorrei poterli combinare o accettarli entrambi –

+1

Il mio metodo è in realtà leggermente più generale (perché se restituisci più tipi possono avere tipi diversi). Ho scritto riassumere esattamente questo uso. – hadley

+0

Non riesco a far funzionare questo metodo per me perché sto utilizzando la funzione nrow per sommare il numero di righe nei dati sottostanti, qualche suggerimento? –