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

如何按ID列分组并拼接同一ID对应的多行列字段内容

修正方案

原有代码问题点

  • 语法错误:字段筛选行后直接拼接head()语句,无分隔符;aggregate计算结果未赋值,导出的还是原始数据
  • 逻辑遗漏:未将同ID下唯一的Name字段加入分组条件,最终结果会丢失Name列
  • 变量名错误:aggregate调用的数据集名写为df,实际加载的数据集名为diagnoses
  • 未做类型兼容处理:直接拼接不同类型字段可能触发类型报错

可用代码(两种实现)

1. 基于base R的aggregate实现(沿用你原本的写法逻辑)

# 加载依赖包
library(readxl)
library(openxlsx)

# 读取数据并保留目标字段
diagnoses <- read_xlsx("excel file.xlsx")
diagnoses <- diagnoses[,c("ID" ,"Name" ,"Diagnosis" ,"Medicine")]
head(diagnoses)

# 按ID+Name分组拼接,as.character适配多数据类型
result <- aggregate(
  cbind(Diagnosis, Medicine) ~ ID + Name, 
  data = diagnoses, 
  FUN = function(x) paste0(as.character(x), collapse = '|')
)

# 导出结果
write.xlsx(result, "Diagnoses.xlsx")

2. 基于dplyr的tidyverse风格实现

# 加载依赖包
library(readxl)
library(openxlsx)
library(dplyr)

# 读取+处理+导出全流程
read_xlsx("excel file.xlsx") %>%
  select(ID, Name, Diagnosis, Medicine) %>%
  group_by(ID, Name) %>%
  summarise(
    Diagnosis = paste0(as.character(Diagnosis), collapse = "|"),
    Medicine = paste0(as.character(Medicine), collapse = "|"),
    .groups = "drop"
  ) %>%
  write.xlsx("Diagnoses.xlsx")

说明

代码中增加的as.character()转换逻辑,适配你数据中的integer、bit、nvarchar等不同字段类型,拼接前统一转为字符格式,避免类型不兼容报错。两种实现输出的结果都和你预期的格式完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 08:09:03