在数据框中按组折叠文本[重复]
Posted
技术标签:
【中文标题】在数据框中按组折叠文本[重复]【英文标题】:Collapse text by group in data frame [duplicate] 【发布时间】:2022-01-17 23:55:39 【问题描述】:如何在group
列中按组聚合数据并折叠text
列中的文本?
样本数据:
df <- read.table(header=T, text="
group text
a a1
a a2
a a3
b b1
b b2
c c1
c c2
c c3
")
所需的输出(数据框):
group text
a a1a2a3
b b1b2
c c1c2c3
现在我有:
sapply(unique(df$group), function(x)
paste0(df[df$group==x,"text"], collapse='')
)
这在某种程度上有效,因为它返回按组正确折叠的文本,但作为向量:
[1] "a1a2a3" "b1b2" "c1c2c3"
我需要一个带有group
列的数据框。
【问题讨论】:
【参考方案1】:只需使用aggregate
:
aggregate(df$text, list(df$group), paste, collapse="")
## Group.1 x
## 1 a a1a2a3
## 2 b b1b2
## 3 c c1c2c3
或plyr
library(plyr)
ddply(df, .(group), summarize, text=paste(text, collapse=""))
## group text
## 1 a a1a2a3
## 2 b b1b2
## 3 c c1c2c3
如果您有大型数据集,ddply
比 aggregate
快。
编辑: 在@SeDur 的建议下:
aggregate(text ~ group, data = df, FUN = paste, collapse = "")
## group text
## 1 a a1a2a3
## 2 b b1b2
## 3 c c1c2c3
对于与早期方法相同的结果,您必须这样做:
aggregate(x=list(text=df$text), by=list(group=df$group), paste, collapse="")
EDIT2:使用data.table
:
library("data.table")
dt <- as.data.table(df)
dt[, list(text = paste(text, collapse="")), by = group]
## group text
## 1: a a1a2a3
## 2: b b1b2
## 3: c c1c2c3
【讨论】:
使用aggregate
的公式形式给出更漂亮的名称:aggregate(text ~ group, data = df, FUN = paste, collapse = "")
@rawr 这是第一次编辑
非公式 aggregate
也不需要那么折磨人 - aggregate(df["text"], df["group"], paste, collapse="")
就可以了。【参考方案2】:
您可以为此使用 dplyr 包
library(dplyr)
df %>%
group_by(group) %>%
summarise(text=paste(text,collapse=''))
【讨论】:
当您折叠所有行时,如何保留所有变量值而不仅仅是一个分配的值?以上是关于在数据框中按组折叠文本[重复]的主要内容,如果未能解决你的问题,请参考以下文章
在大熊猫DataFrame中按组删除异常值的更快方法[重复]
在 pandas 数据框中按组回归并添加带有预测值和 beta/t-stats 的列