r - 计算 R 中因子的出现次数,报告的计数为零

标签 r plyr

我想计算数据框中某个因素的出现次数。例如,在下面的代码中计算给定类型的事件数:

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 , BC ,我还想查看 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/

相关文章:

r - Ubuntu 上的 JRI fatal error

r - R中runif和sample的区别?

r - 是否有从多个数据集中获取多个列中的计数的函数?

r - 在 R 中,对给定行上方的所有行求和并以新 ID 重新开始?

r - 优化 R 中的嵌套 foreach dopar

r - 构建均值/方差汇总表的快速/优雅方法

r - 对于除当前级别之外的所有级别的每个级别的因子聚合值

r - 我使用plyr对吗?我似乎使用了太多的内存

r - 有没有办法删除数据集中符号相反的对?

r - 在ggplot2中绘制运行平均值