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
相关产品推荐
相关产品推荐

