gpt4 book ai didi

R Dataframe : aggregating strings within column, 跨行,按组

转载 作者:行者123 更新时间:2023-12-03 05:24:56 26 4
gpt4 key购买 nike

对于一个特殊的问题,我有一个看起来非常低效的解决方案。我有文本数据,由于各种原因,这些数据以随机间隔跨数据帧的行进行分解。然而,根据数据框中其他变量的独特组合,已知某些子集属于同一组。例如,请参阅演示结构和我的初始解决方案的 MWE:

# Data
df <- read.table(text="page passage person index text
1 123 A 1 hello
1 123 A 2 my
1 123 A 3 name
1 123 A 4 is
1 123 A 5 guy
1 124 B 1 well
1 124 B 2 hello
1 124 B 3 guy",header=T,stringsAsFactors=F)

master<-data.frame()
for (i in 123:max(df$passage)) {
print(paste0('passage ',i))
tempset <- df[df$passage==i,]
concat<-''
for (j in 1:nrow(tempset)) {
print(paste0('index ',j))
concat<-paste(concat, tempset$text[j])
}
tempdf<-data.frame(tempset$page[1],tempset$passage[1], tempset$person[1], concat, stringsAsFactors = FALSE)
master<-rbind(master, tempdf)
rm(concat, tempset, tempdf)
}
master
> master
tempset.page.1. tempset.passage.1. tempset.person.1. concat
1 1 123 A hello my name is guy
2 1 124 B well hello guy

在这个例子中,就像在我的真实案例中一样,“passage”是唯一的分组变量,因此并不完全有必要将其他部分与它一起使用,尽管我希望它们在我的数据集中可用。

我目前的估计是,对于一个数据集,我设计的这个过程将需要几个小时,否则我的计算机上的 R 可以轻松处理该数据集。也许可以通过其他函数或包来提高效率,或者不创建和删除这么多对象?

感谢您的帮助!

最佳答案

data.table 这是一种方法:

require(data.table)
DT <- data.table(df)

DT[,.(concat=paste0(text,collapse=" ")),by=.(page,passage,person)]
# page passage person concat
# 1: 1 123 A hello my name is guy
# 2: 1 124 B well hello guy

我认为,将额外的变量(除了 passage)放入 by 中并不会花费太多。

<小时/>

dplyr 类似物是

df %>% 
group_by(page,passage,person) %>%
summarise(concat=paste0(text,collapse=" "))

# Source: local data frame [2 x 4]
# Groups: page, passage, person
#
# page passage person concat
# 1 1 123 A hello my name is guy
# 2 1 124 B well hello guy
<小时/>

基本 R 一种方法是:

df$concat <- with(df,ave(text,passage,FUN=function(x)paste0(x,collapse=" ")))
unique(df[,which(names(df)%in%c("page","passage","person","concat"))])
# page passage person concat
# 1 1 123 A hello my name is guy
# 6 1 124 B well hello guy

关于R Dataframe : aggregating strings within column, 跨行,按组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30266983/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com