我想计算数据框中某个因素的出现次数。例如,在下面的代码中计算给定类型的事件数:
library(plyr)
events <- data.frame(type = c('A', 'A', 'B'),
quantity = c(1, 2, 1))
ddply(events, .(type), summarise, quantity = sum(quantity))
输出如下:
type quantity
1 A 3
2 B 1
但是,如果我知道有三种类型的事件
A
, B
和 C
,我还想查看 C
的计数这是0
?换句话说,我希望输出为: type quantity
1 A 3
2 B 1
3 C 0
我该怎么做呢?感觉应该在某个地方定义一个函数来执行此操作。
以下是我关于如何解决这个问题的两个不太好的想法。
想法 #1:我知道我可以使用
for
来做到这一点循环,但我知道人们普遍认为,如果您使用的是 for
循环进入 R
,那么你做错了什么,一定有更好的方法来做。想法#2:向原始数据框添加虚拟条目。这个解决方案有效,但感觉应该有一个更优雅的解决方案。
events <- data.frame(type = c('A', 'A', 'B'),
quantity = c(1, 2, 1))
events <- rbind(events, data.frame(type = 'C', quantity = 0))
ddply(events, .(type), summarise, quantity = sum(quantity))
最佳答案
如果您定义您的 events
,您将免费获得此功能。变量正确地作为具有所需三个水平的因素:
R> events <- data.frame(type = factor(c('A', 'A', 'B'), c('A','B','C')),
+ quantity = c(1, 2, 1))
R> events
type quantity
1 A 1
2 A 2
3 B 1
R> table(events$type)
A B C
2 1 0
R>
只需调用
table()
在这个因素上已经做了正确的事情,ddply()
也可以如果你告诉它不要
drop
:R> ddply(events, .(type), summarise, quantity = sum(quantity), .drop=FALSE)
type quantity
1 A 3
2 B 1
3 C 0
R>
关于r - 计算 R 中因子的出现次数,报告的计数为零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16073918/