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

R语言:以拼接为聚合函数实现文本分组聚合

嘿,这个需求在数据处理里挺常见的,我给你分享两种实用的方案,分别对应你想要的聚合后data.frame和目标列表格式:

方法1:生成聚合后的data.frame

这里有两种主流实现方式,你可以根据自己的习惯选择:

使用dplyr包(tidyverse风格)

dplyr是处理数据框的利器,代码可读性很高:

# 先加载dplyr包,如果没装的话先运行install.packages("dplyr")
library(dplyr)

# 定义你的原始数据框
df <- data.frame(sid = c(1, 1, 2, 2), text = c("hello", "world", "whats", "up"))

# 按sid分组,合并text列
agg_df <- df %>%
  group_by(sid) %>%
  summarize(text = paste(text, collapse = " "), .groups = "drop")

# 查看结果
agg_df

运行后你会得到:

sid text       
1   1 hello world
2   2 whats up   

注:.groups = "drop"是为了分组后取消分组状态,避免后续操作出现警告,R版本较新的话建议加上。

使用Base R(无需额外包)

如果不想加载第三方包,用base R的aggregate函数也能搞定:

# 定义原始数据框
df <- data.frame(sid = c(1, 1, 2, 2), text = c("hello", "world", "whats", "up"))

# 聚合操作
agg_df_base <- aggregate(text ~ sid, data = df, FUN = function(x) paste(x, collapse = " "))

# 查看结果
agg_df_base

得到的结果和上面完全一致。

方法2:生成对应索引的列表

如果更想要列表格式,有两种简单的方式:

从聚合后的data.frame转换

直接提取聚合后的text列转成列表即可:

# 用上面得到的agg_df
text_list <- as.list(agg_df$text)
text_list

输出:

[[1]]
[1] "hello world"

[[2]]
[1] "whats up"

直接用tapply生成列表

一步到位,不需要先生成data.frame:

text_list <- unname(tapply(df$text, df$sid, function(x) paste(x, collapse = " ")))
text_list

注:unname()是为了去掉列表元素的名字(默认会保留sid作为名字),如果你不需要名字的话加上就行,去掉后列表元素会是无名的索引形式,正好符合你的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 06:57:45