1

在 R(或 S-PLUS)中,在数据框中聚合字符串数据的好方法是什么?

考虑以下:

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      

这感觉就像一个黑客。任何人都可以提出更好的方法吗?

4

5 回答 5

2

使用table,无需排序:

ctable <- table(myList);
counts <- data.frame(Name = names(ctable),Count = as.vector(ctable));
于 2009-05-14T07:39:15.987 回答
2

这是上述答案的组合(如蒂埃里所建议)

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

这给了你

  Var1 Freq
1  Bob    3
2  Joe    1
3 Mary    1
于 2009-07-24T18:47:00.833 回答
1

你的意思是这样吗?

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
于 2009-05-13T03:58:26.170 回答
1

使用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
于 2018-09-08T04:02:00.900 回答
0

使用sqldf库:

require(sqldf)

myList<- data.frame(v=c("Bob", "Mary", "Bob", "Bob", "Joe"))
sqldf("SELECT v,count(1) FROM myList GROUP BY v")
于 2018-03-19T14:22:10.890 回答