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

R语言中如何按分组将多行数据合并为单行?

问题描述

现有如下R数据集:

a1 <- c("a","a","a", "b", "c", "c", "d", "d", "d", "d")
b1 <- c(7, 7, 7,5, 4, 4, 3, 3, 3, 3)
c1 <- c("A","B", "C", "D", "E", "F", "B", "C", "EE", "F")
m1 <- data.frame(a1, b1, c1)

期望得到的结果数据集:

a <- c("a","b", "c", "d")
b <- c(7, 5, 4, 3)
c <- c("ABc","D", "EF", "BCEEF")
m <- data.frame(a, b, c)

尝试了以下代码但未成功:

m1 <- m1 %>%
 group_by(a1)

请问该如何修改代码实现需求?


解决方案

你仅完成了分组操作,未对分组后的数据做聚合计算。可以用dplyr包的聚合函数完成需求:

library(dplyr)

# 核心聚合逻辑
m <- m1 %>%
  group_by(a1, b1) %>%  # 因每组b1值完全一致,同步分组确保保留唯一值
  summarise(c1 = paste(c1, collapse = ""), .groups = "drop") %>%
  rename(a = a1, b = b1, c = c1)

# 若你确实需要"a"组结果为"ABc"(原数据拼接应为"ABC",推测是笔误),可单独修正
m$c[m$a == "a"] <- "ABc"

代码说明:

  • group_by(a1, b1):利用每组a1对应b1值唯一的特性,同步分组避免后续处理出现重复值
  • summarise(c1 = paste(c1, collapse = "")):将每组的c1字符串拼接为单个字符串
  • .groups = "drop":取消分组状态,返回普通数据框
  • rename:将列名修改为你期望的a、b、c

如果"ABc"是输入笔误(原数据c1为"A""B""C",正确拼接应为"ABC"),去掉最后一行单独修正的代码即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 16:53:14