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

合并DataFrame重复行并为差异值创建新列的实现方法

解决DataFrame相似行聚合并拆分不同值的问题

嘿,刚好碰到过类似的需求!咱们可以用tidyverse工具包来轻松搞定这个任务——核心思路是先按公司分组处理统一信息,再把不同的员工信息转成宽格式的新列。

先看看你给出的原始数据:

dataframe1 <- data.frame(Company_Name = c("KFC", "KFC", "KFC", "McD", "McD"), 
                         Company_ID = c(1, 1, 1, 2, 2), 
                         Company_Phone = c("237389", "-", "-", "237002", "-"), 
                         Employee_Name = c("John", "Mary", "Jane", "Joshua", "Anne"), 
                         Employee_ID = c(1001, 1002, 1003, 2001, 2002))

具体解决方案代码

library(tidyverse)

# 处理聚合与列转换
aggregated_df <- dataframe1 %>%
  # 按公司维度分组
  group_by(Company_Name, Company_ID) %>%
  # 1. 提取有效的公司电话(排除占位符"-"),同时给每个员工编序号
  mutate(
    Company_Phone = first(Company_Phone[Company_Phone != "-"]),
    emp_seq = row_number()
  ) %>%
  # 2. 把员工信息转成宽格式,生成带序号的新列
  pivot_wider(
    names_from = emp_seq,
    values_from = c(Employee_Name, Employee_ID),
    names_glue = "{.value}_{emp_seq}"  # 自定义新列名的格式
  ) %>%
  # 取消分组状态
  ungroup()

# 查看最终结果
print(aggregated_df)

输出结果说明

运行后你会得到这样的结构化DataFrame:

# A tibble: 2 × 8
  Company_Name Company_ID Company_Phone Employee_Name_1 Employee_Name_2 Employee_Name_3 Employee_ID_1 Employee_ID_2 Employee_ID_3
  <chr>              <dbl> <chr>         <chr>           <chr>           <chr>                   <dbl>         <dbl>         <dbl>
1 KFC                    1 237389        John            Mary            Jane                     1001          1002          1003
2 McD                    2 237002        Joshua          Anne            NA                       2001          2002             NA

关键步骤解释

  • 分组处理电话:用first(Company_Phone[Company_Phone != "-"])提取每组里第一个非"-"的有效电话,确保同一个公司只保留唯一正确的联系电话。
  • 生成员工序号:row_number()给每个公司下的员工按顺序编号,为后续拆分不同员工信息提供标识。
  • 转宽格式拆分列:pivot_wider把原来每行的员工信息,按序号拆分成Employee_Name_1、Employee_ID_2这类带编号的新列,完美实现“合并相似行、拆分不同值”的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:42:51