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

如何按CompanyID拆分数据并将年份转为列存储DirectorID?

没问题!我来帮你搞定这个数据转换的需求。你需要把记录董事任职时间段的长表,转换成按公司分组、2006-2016每一年作为列的宽表,列里显示当年在任的DirectorID。下面是具体的实现方案,用R的tidyverse工具包来完成:

第一步:明确原始数据结构

先把你给出的原始数据补全成可运行的格式(最后一条记录的EndYear我默认补为2016,你可以根据实际情况调整):

df <- data.frame(
  DirectorID = c(11734844255, 187836811559, 196167673, 401544433, 401604433, 5524344997),
  CompanyID = c(25830, 25830, 25830, 25830, 25830, 12339),
  StartYear = c(2015, 2006, 2008, 2006, 2006, 2011),
  EndYear = c(2016, 2016, 2015, 2014, 2010, 2016)
)

第二步:核心转换代码

我们分三步实现需求:拆分时间段到每年、分组合并董事ID、转成宽格式:

library(tidyverse)

# 1. 把每个董事的任职时间段拆分成单独的年份行,只保留2006-2016的目标年份
df_expanded <- df %>%
  rowwise() %>%
  # 生成该董事在2006-2016范围内的所有任职年份
  mutate(Year = list(intersect(StartYear:EndYear, 2006:2016))) %>%
  unnest(Year) %>%
  ungroup()

# 2. 按公司和年份分组,把同年任职的DirectorID合并成列表(也可转成逗号分隔字符串)
df_grouped <- df_expanded %>%
  group_by(CompanyID, Year) %>%
  summarise(DirectorIDs = list(DirectorID), .groups = "drop")

# 3. 转换为宽格式,确保2006-2016所有年份都存在,无数据的年份用空列表填充
df2 <- df_grouped %>%
  pivot_wider(
    id_cols = CompanyID,
    names_from = Year,
    values_from = DirectorIDs,
    names_prefix = "Y", # 给年份列加前缀,避免R语法报错(列名不能以数字开头)
    values_fill = list(DirectorIDs = list())
  )

# 如果需要把列表转成逗号分隔的字符串(方便阅读),可以运行这一步
df2_formatted <- df2 %>%
  mutate(across(starts_with("Y"), ~paste(unlist(.), collapse = ", ")))

结果说明

运行完后,df2就是你要的预期输出:

  • 每一行对应一个CompanyID
  • 每一列Y2006到Y2016存储该年份在任的所有DirectorID(以列表形式)
  • 如果用df2_formatted,则每个单元格是逗号分隔的ID字符串,更直观

比如CompanyID=25830的Y2006列会包含187836811559, 401544433, 401604433这三个ID,Y2015列会包含11734844255, 187836811559, 196167673,完全符合你的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:52:41