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

如何正确计算特定年份中各国相关咨询的占比?

多国家咨询数据的占比计算方式选择

我有一份客户咨询各国信息的数据集,单次咨询可能涉及1个或多个国家,多国家记录在同一列中用逗号分隔。现在需要明确:计算特定年份中某国相关咨询的占比时,应该采用哪种方式?

方式一:拆分多国家行后计算占比

先拆分含多国家的行(增加观测数),统计拆分后的总观测数与该国观测数后计算占比,对应R代码:

df %>% 
  separate_rows(Country) %>% 
  group_by(Year) %>% 
  mutate(n.Total = n()) %>%
  group_by(Year, Country) %>% 
  mutate(n.Country = n()) %>% 
  group_by(Year) %>% 
  mutate(Percentage = n.Country/n.Total*100) %>%
  distinct(Country, .keep_all = T)

方式二:基于原始观测数计算占比

保留原始咨询的总观测数,统计该国出现次数后计算占比,对应R代码:

df %>% 
 group_by(Year) %>%
  mutate(n.Total = n()) %>% 
  separate_rows(Country) %>% 
  group_by(Year, Country) %>% 
  mutate(n.Country = n()) %>% 
  group_by(Year) %>% 
  mutate(Percentage = n.Country/n.Total*100) %>%
  distinct(Country, .keep_all = T)

示例数据集

structure(list(Year = c(2019, 2019, 2019, 2019, 2019, 2019, 2019, 
2019, 2019, 2019, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 
2020, 2020), Country = c("A", "B", "A,B", "C", "C", "A", "A, C", 
"B", "B,C", "A", "A,C", "C", "A", "B,C", "A", "B", "A", "B", 
"C", "B,C")), class = c("tbl_df", "tbl", "data.frame"), row.names = c(NA, 
-20L))

两种方式的核心差异与选择逻辑

两种方式的本质区别是分母的统计口径不同:

  • 方式一的分母是「所有国家被提及的总次数」(一条涉及多个国家的咨询会被拆分成多条记录,总观测数是所有国家提及次数的总和),计算的是该国在所有咨询的国家提及中所占的比例。比如一条同时咨询A和B的记录,会被分别算入A和B的统计中,分母也会增加2。
  • 方式二的分母是「原始咨询的总条数」(不管每条咨询涉及多少国家,都只算1次),计算的是涉及该国的咨询数占总咨询数的比例。比如一条同时咨询A和B的记录,会被算入A和B的n.Country,但分母始终是原始的咨询条数。

具体选哪种,完全看你的业务需求:

  • 若想了解该国在所有被咨询的国家里的曝光占比,选方式一;
  • 若想统计有多大比例的咨询涉及该国,选方式二。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 14:36:19