В R, что является хорошим способом агрегирования данных String - PullRequest
1 голос
/ 13 мая 2009

В R (или S-PLUS), каков хороший способ агрегирования данных String во фрейме данных?

Обратите внимание на следующее:

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

Я бы хотел, чтобы результат был:

 [Bob,  3
  Mary, 1
  Joe,  1]

В настоящее время я знаю, как это сделать, только с помощью функции итога.

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

 Bob :3                                
 Joe :1                                
 Mary:1      

Это похоже на взлом. Кто-нибудь может предложить лучший способ?

Ответы [ 5 ]

2 голосов
/ 14 мая 2009

Используя table, сортировка не требуется:

ctable <- table(myList);
counts <- data.frame(Name = names(ctable),Count = as.vector(ctable));
2 голосов
/ 24 июля 2009

Это комбинация приведенных выше ответов (согласно предложению Тьерри)

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

, что дает вам

  Var1 Freq
1  Bob    3
2  Joe    1
3 Mary    1
1 голос
/ 08 сентября 2018

Использование data.table

myList <- data.frame(v1=c("Bob", "Mary", "Bob", "Bob", "Joe"))
library(data.table)
     v1 N
1:  Bob 3
2: Mary 1
3:  Joe 1
1 голос
/ 13 мая 2009

Вы имеете в виду, как это?

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
0 голосов
/ 19 марта 2018

Использование библиотеки sqldf:

require(sqldf)

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