In R, what is a good way to aggregate String data

In R (or S-PLUS), what is a good way to aggregate String data in a data frame?

Consider the following:

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

      

I would like the result to be:

 [Bob,  3
  Mary, 1
  Joe,  1]

      

Currently, the only way I know how to do this is with a pivot function.

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

 Bob :3                                
 Joe :1                                
 Mary:1      

      

It looks like a hack. Can anyone suggest a better way?

0


a source to share


4 answers


Using table

, no need to sort:



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

      

+2


a source


This is a combination of the above answers (as suggested by Thierry)

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

      



which gives you

  Var1 Freq
1  Bob    3
2  Joe    1
3 Mary    1

      

+2


a source


Do you mean this?

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

      

+1


a source


Using the library sqldf

:

require(sqldf)

myList<- data.frame(v=c("Bob", "Mary", "Bob", "Bob", "Joe"))
sqldf("SELECT v,count(1) FROM myList GROUP BY v")

      

0


a source







All Articles