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

R语言按ID分组将多行姓名转为多列宽表实现ID去重

解决方案

你可以选择以下两种常用实现方式:


方法1:tidyverse 方案(代码简洁易读)

需要先安装加载dplyr和tidyr包:

library(dplyr)
library(tidyr)

result <- df %>%
  group_by(ID) %>%
  # 给同ID下的姓名按出现顺序生成列名编号
  mutate(col_name = paste0("Names_", row_number())) %>%
  ungroup() %>%
  # 转换为宽表,缺失值自动填充为空字符串
  pivot_wider(names_from = col_name, values_from = Names, values_fill = "")

方法2:基础R方案(无第三方包依赖)

# 按ID拆分所有姓名
name_split <- split(df$Names, df$ID)
# 统一每个ID对应的姓名长度为3,不足位补空字符串
name_format <- lapply(name_split, function(x) {
  length(x) <- 3
  x[is.na(x)] <- ""
  return(x)
})
# 合并为最终数据框
result <- data.frame(
  ID = unique(df$ID),
  do.call(rbind, name_format)
)
# 修改列名符合要求
colnames(result) <- c("ID", "Names_1", "Names_2", "Names_3")
# 重置行号
rownames(result) <- NULL

两种方案运行后得到的result和你期望的输出格式完全一致,直接打印即可查看结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 11:36:04