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

如何在R中提取TopN高市场份额企业并生成剩余企业汇总行

解决方案(基于tidyverse工具)

可以用dplyr包完成所有操作,步骤清晰且符合tidy风格:

library(tibble)
library(dplyr)

# 示例数据
df <- tibble(
    company = paste0("company_", LETTERS)[1:5],
    var1 = c(150, 200, 320, 800, 450),
    market_share = c(.2, .05, .45, .25, .05)
)

# 处理流程
df_result <- df %>%
  # 按市场份额降序排序
  arrange(desc(market_share)) %>%
  # 拆分出前3名和剩余部分
  mutate(rank = row_number()) %>%
  group_by(group = ifelse(rank <= 3, "top", "rest")) %>%
  group_modify(function(data, key) {
    if (key$group == "top") {
      # 保留前3名的原始数据
      data %>% select(-rank, -group)
    } else {
      # 生成剩余部分的汇总行
      tibble(
        company = paste0("Rest (", nrow(data), ")"),
        var1 = mean(data$var1),
        market_share = sum(data$market_share)
      )
    }
  }) %>%
  ungroup() %>%
  select(-group)

# 查看结果
df_result

代码说明

  • 先用arrange(desc(market_share))完成降序排序;
  • 通过row_number()给每条记录排名,区分前3名和剩余数据;
  • group_modify()分别处理两组数据:前3名直接保留原始记录,剩余数据生成汇总行,其中company列拼接剩余企业数量,var1取均值,market_share求和;
  • 最后去掉辅助列,得到目标结果。

运行后得到的结果和期望输出完全一致:

# A tibble: 4 × 3
  company     var1 market_share
  <chr>      <dbl>        <dbl>
1 company_C    320         0.45
2 company_D    800         0.25
3 company_A    150         0.2 
4 Rest (2)     325         0.1 

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 17:29:57