在R中,聚合字符串数据的好方法是啥
Posted
技术标签:
【中文标题】在R中,聚合字符串数据的好方法是啥【英文标题】:In R, what is a good way to aggregate String data在R中,聚合字符串数据的好方法是什么 【发布时间】:2010-10-25 17:49:38 【问题描述】:在 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
这感觉就像一个黑客。任何人都可以提出更好的方法吗?
【问题讨论】:
【参考方案1】:使用table
,无需排序:
ctable <- table(myList);
counts <- data.frame(Name = names(ctable),Count = as.vector(ctable));
【讨论】:
您可以将最后一行简化为 as.data.frame(ctable) 请注意,只有在一行中放置多个命令时才需要分号。【参考方案2】:这是上述答案的组合(如 Thierry 所建议的)
data.frame(table(myList[,1]))
给你
Var1 Freq
1 Bob 3
2 Joe 1
3 Mary 1
【讨论】:
它给了我一个错误 - 基于蒂埃里的建议的一个班轮将是:as.data.frame(table(myList)) 这很有趣。你收到什么样的错误信息?我刚刚试了一下,没有收到错误消息。 从头开始 - 我在将 myList 定义为列表而不是 data.frame 后尝试过【参考方案3】:你的意思是这样吗?
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
【讨论】:
【参考方案4】:使用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
【讨论】:
【参考方案5】:使用sqldf
库:
require(sqldf)
myList<- data.frame(v=c("Bob", "Mary", "Bob", "Bob", "Joe"))
sqldf("SELECT v,count(1) FROM myList GROUP BY v")
【讨论】:
以上是关于在R中,聚合字符串数据的好方法是啥的主要内容,如果未能解决你的问题,请参考以下文章