You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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)

输出结果

运行后会得到你预期的格式:

STCROPLFUNPRASCDPOL_Count
143390COM713010/021
143390COM3010/021
248813COM530011/151
248813COM535011/151
24112COM3010/022

补充说明

  • 如果你的需求是统计每个维度组合下的总记录条数(而非唯一POL数量),可以把n_distinct(POL)换成n(),这样第一组会返回4,但根据你的预期输出,显然不是这个需求。
  • .groups = "drop"是为了在分组统计后取消分组状态,让结果变成普通的数据框,避免后续操作出现分组相关的问题。

内容的提问来源于stack exchange,提问作者DinuJ

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 04:00:43