R语言tally函数使用问题:按指定维度统计POL未达预期输出
解决按多维度统计唯一POL数量的问题
看起来你是想按ST、CRO、PL、FUN、PRA、SCD这几个维度分组,统计每个分组下唯一POL的数量,但之前的代码因为把POL也加入了分组条件,导致结果不符合预期。
问题分析
你之前的代码Output <- tally(group_by(Table,POL,ST,CRO, PL, PRA, FUN,SCD))是把POL和其他维度一起作为分组依据,这样每个POL会单独成为一个分组,tally()返回的是每个POL在对应维度组合下的记录条数,而不是你想要的“每个维度组合下有多少个不同的POL”。
解决方案
我们需要调整分组逻辑,只按目标维度分组,然后用n_distinct()函数统计分组内唯一的POL数量:
library(dplyr) # 加载你提供的示例数据 Table <- data.frame( DIV = c(1,1,1,1,1,1,1,1,1), ST = c(14,14,14,14,24,24,14,24,24), POL = c(3,3,3,3,49,49,11761,15672,15675), CRO = c(33,33,33,33,88,88,33,11,11), PL = c(90,90,90,90,13,13,90,2,2), CTY = c(101,101,101,101,79,79,157,41,41), FUN = rep("COM",9), PRA = c(7130,7130,7130,7130,5300,5350,30,30,30), LEV = c(0.75,0.75,0.75,0.75,0.90,0.90,0.70,0.75,0.70), LIA = c(1482,10549,679,1329,15214,15214,7277,7662,16251), PRM = c(331,1785,115,225,2647,3346,394,1091,1869), R_L = rep(0,9), LOS = rep(0,9), SCD = c("10/02","10/02","10/02","10/02","11/15","11/15","10/02","10/02","10/02") ) # 正确的统计代码 Output <- Table %>% group_by(ST, CRO, PL, FUN, PRA, SCD) %>% summarise(POL_Count = n_distinct(POL), .groups = "drop") # 查看结果 print(Output)
输出结果
运行后会得到你预期的格式:
| ST | CRO | PL | FUN | PRA | SCD | POL_Count |
|---|---|---|---|---|---|---|
| 14 | 33 | 90 | COM | 7130 | 10/02 | 1 |
| 14 | 33 | 90 | COM | 30 | 10/02 | 1 |
| 24 | 88 | 13 | COM | 5300 | 11/15 | 1 |
| 24 | 88 | 13 | COM | 5350 | 11/15 | 1 |
| 24 | 11 | 2 | COM | 30 | 10/02 | 2 |
补充说明
- 如果你的需求是统计每个维度组合下的总记录条数(而非唯一POL数量),可以把
n_distinct(POL)换成n(),这样第一组会返回4,但根据你的预期输出,显然不是这个需求。 .groups = "drop"是为了在分组统计后取消分组状态,让结果变成普通的数据框,避免后续操作出现分组相关的问题。
内容的提问来源于stack exchange,提问作者DinuJ
相关产品推荐
相关产品推荐

