2009-05-13 4 views
0

Dans R (ou S-PLUS), quel est le meilleur moyen d'agréger des données String dans un bloc de données?En R, quel est le meilleur moyen d'agréger des données de type chaîne?

Considérez ce qui suit:

myList <- as.data.frame(c("Bob", "Mary", "Bob", "Bob", "Joe")) 

Je voudrais que la sortie soit:

[Bob, 3 
    Mary, 1 
    Joe, 1] 

Actuellement, la seule façon que je sais comment faire cela est la fonction sommaire.

> summary(as.data.frame(myList)) 

Bob :3         
Joe :1         
Mary:1  

Cela ressemble à un hack. Quelqu'un peut-il suggérer un meilleur moyen?

Répondre

2

En utilisant table, pas besoin de trier:

ctable <- table(myList); 
counts <- data.frame(Name = names(ctable),Count = as.vector(ctable)); 
+2

vous pouvez simplifier la dernière ligne à as.data.frame (cta ble) Notez que les points-virgules ne sont nécessaires que si vous mettez plus d'une commande sur une ligne. – Thierry

1

Voulez-vous dire par là?

myList <- c("Bob", "Mary", "Bob", "Bob", "Joe") 
r <- rle(sort(myList)) 
result <- as.data.frame(cbind(r$values, r$lengths)) 
names(result) <- c("Name", "Occurrences") 
result 
    Name Occurrences 
1 Bob   3 
2 Joe   1 
3 Mary   1 
2

C'est une combinaison des réponses ci-dessus (comme suggéré par Thierry)

data.frame(table(myList[,1])) 

qui vous donne

Var1 Freq 
1 Bob 3 
2 Joe 1 
3 Mary 1 
+0

Cela me donne une erreur - un doublage basé sur la suggestion de Thierry serait: as.data.frame (table (myList)) – bubaker

+1

C'est intéressant. Quel genre de message d'erreur avez-vous reçu? Je l'ai juste essayé sans recevoir un message d'erreur. – andrewj

+0

Scratch que - je l'ai essayé après avoir défini myList comme une liste, pas un data.frame – bubaker

Questions connexes