2009-09-08 6 views
11

Hadley m'a allumé sur le paquet plyr et je me retrouve à l'utiliser tout le temps pour faire des choses en «groupe par». Mais je me trouve avoir à renommer toujours les colonnes résultantes car ils par défaut à V1, V2, etc.Renommer la colonne de sortie avec le paquet plyr dans R

Voici un exemple:

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

Y at-il un moyen de rendre le nom ddply la colonne résultant pour moi, donc Je peux omettre cette dernière ligne?

+0

JD- Cette première ligne de code ne fonctionne pas, devrait être rnorm (..., 72 , 2), par exemple: mydata <-data.frame (matrice (rnorm (144, moyenne = 2, sd = 2), 72,2), c (rep ("A", 24), rep ("B ", 24), rep (" C ", 24))) ' – medriscoll

+0

bonne prise! J'ai édité mon exemple. Merci! –

Répondre

10

Cela semble fonctionner:

> 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

Je m'embrouille dans la syntaxe R sans vraiment la comprendre. Pourquoi diable at-on besoin de la fonction de concaténation? – Farrel

+0

@Farrel: pour donner un nom à l'élément de données. L'utilisation de 'data.frame' fonctionne aussi bien. – krlmlr

19

Utilisez récapituler (ou résumez):

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

c'est un excellent moyen de résoudre ce problème. J'ai choisi la réponse de Chris seulement parce que c'est plus général. Je vais utiliser à la fois sa méthode et la vôtre dans le futur. J'aimerais pouvoir les combiner ou les accepter tous les deux –

+1

Ma méthode est en fait légèrement plus générale (parce que si vous renvoyez plusieurs types, ils peuvent avoir des types différents). J'ai écrit résumer pour exactement cette utilisation. – hadley

+0

Je ne peux pas obtenir cette méthode à travailler pour moi parce que j'utilise la fonction nrow pour additionner le nombre de lignes dans les données sous-ensemble, des conseils? –