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

如何在R的DataFrame中处理列表列并均分各公司利润?

解决方案:在R中拆分公司列并均分利润

我来帮你解决这个问题!你遇到的核心问题是当生产公司列包含多个公司的集合(字符串形式或列表形式)时,直接unlist会丢失利润与公司的对应关系,无法完成均分。下面分两种常见场景给出具体实现:

场景1:生产公司列是字符串形式(如c(B,C))

如果你的数据集里生产公司是类似c(B,C)的字符串,我们需要先提取出公司名称,再计算均分利润:

步骤1:构造示例数据

library(tidyverse)

# 模拟你的原始数据集
df <- tibble(
  生产公司 = c("A", "c(B,C)", "D", "c(E,F,G)"),
  利润 = c(35000, 15000, 750000, 100000)
)

步骤2:处理数据并得到结果

df_processed <- df %>%
  # 1. 清洗公司字符串:去掉c(和),按逗号分割成公司列表
  mutate(
    公司列表 = str_remove_all(生产公司, "c\\(|\\)") %>% str_split(",\\s?"),
    # 2. 计算每个组的公司数量
    公司数量 = map_int(公司列表, length),
    # 3. 计算单个公司的利润,取整匹配你的预期输出
    单个利润 = round(利润 / 公司数量, 0)
  ) %>%
  # 4. 将公司列表展开为单独的行
  unnest(公司列表) %>%
  # 5. 重命名列并保留需要的字段
  select(生产公司 = 公司列表, 利润 = 单个利润)

# 查看结果
print(df_processed)

运行后会得到你想要的输出:

# A tibble: 7 × 2
  生产公司   利润
  <chr>     <dbl>
1 A         35000
2 B          7500
3 C          7500
4 D        750000
5 E         33333
6 F         33333
7 G         33333

场景2:生产公司列是真正的列表类型

如果你的生产公司列是R的列表(每个元素是包含多个公司的向量),处理起来更简单,不需要字符串清洗:

步骤1:构造示例列表型数据集

df_list <- tibble(
  生产公司 = list("A", c("B","C"), "D", c("E","F","G")),
  利润 = c(35000, 15000, 750000, 100000)
)

步骤2:处理数据

df_list_processed <- df_list %>%
  mutate(
    # 计算每个列表元素的公司数量
    公司数量 = map_int(生产公司, length),
    # 均分利润并取整
    单个利润 = round(利润 / 公司数量, 0)
  ) %>%
  # 展开列表为单独行
  unnest(生产公司) %>%
  select(生产公司, 利润 = 单个利润)

这样同样能得到预期的拆分和均分结果。

关键说明

  • 我们用map_int来计算每个组的公司数量,保证利润能和对应的公司组匹配;
  • unnest函数负责将列表/向量展开为多行,同时保留对应的均分后利润;
  • 用round(0)取整是为了匹配你给出的预期输出,如果需要保留小数可以调整参数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:42:41