如何使用dplyr将因子水平分组计数结果保存为新变量
问题原因
你收到报错是因为count()是dplyr中用于统计数据框/分组整体行数的函数,不支持直接传入逻辑向量作为参数。你的需求是统计每个分组下符合条件的观测数,直接对逻辑向量使用sum()即可:逻辑值TRUE会自动转为1、FALSE转为0,求和结果就是符合条件的行数。
另外注意你需要的是每个a值对应一行的汇总结果,应该用summarise()做聚合,而不是mutate()(后者会保留原数据所有行,给每行重复添加统计值)。
解决方法
方法1:手动指定统计列(适合类别少的场景)
直接在summarise()中对每个类别求和即可:
library(dplyr) df2 <- df %>% group_by(a) %>% summarise( number_acc = sum(b == "acc"), number_rej = sum(b == "rej"), number_con = sum(b == "con") )
方法2:自动识别所有类别(适合类别多的场景)
先统计每个a和b的组合计数,再转换为宽表,不需要手动逐个写求和逻辑:
library(dplyr) library(tidyr) df2 <- df %>% count(a, b, name = "cnt") %>% pivot_wider( names_from = b, values_from = cnt, names_prefix = "number_" )
两种方法输出的结果都和你期望的格式完全一致。
内容的提问来源于stack exchange,提问作者Philipp Schulz
相关产品推荐
相关产品推荐

