gpt4 book ai didi

r - 将每个数据框行文本分成五个均匀的文本 block

转载 作者:行者123 更新时间:2023-12-02 06:50:21 25 4
gpt4 key购买 nike

我希望得到一些帮助来解决这个棘手的字符串问题。

当前数据框

ID  Text
1 This is a very long piece of string. This contains many lines.

我想将其转换为:

ID   Text1            Text2            Text3           Text4         Text5
1 This is a very long piece of string. This contains many lines.

字符串拆分应该发生在均匀拼接的单词数量上。在上面的示例中,我试图演示将行平均拆分 5 次,因此每列应包含 20% 的单词。

这背后的目标是将这些词构建成这样一种方式,即当对话刚刚被拆分时,它们可以被视为时间序列数据。

最佳答案

可能有更好的选择,但这不需要额外的包:

首先,我们创建一个 reproducible example :

df <- data.frame(ID=1:2,
Text=c("Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.",
"Lorem ipsum dolor sit amet, consectetur adipiscing elit"),
stringsAsFactors = FALSE)

然后,chunkizesplit+cut 的包装器,这是棘手的部分。它需要一个 character,将其按空格分割成 n block ,然后返回一个 data.framen许多专栏。 (我们删除了 names,这样 rbind 向下就可以了)。

chunkize <- function(chr, n=5){
x <- strsplit(chr, " ")[[1]]
df <- as.data.frame(
lapply(
split(x,
cut(seq_along(x),
breaks=n)),
paste, collapse=" "),
stringsAsFactors = FALSE, col.names=NULL)
names(df) <- NULL
df
}

然后我们简单地将它应用于每一行。我们还添加了 ID 列:

df_chunked <- do.call("rbind", 
apply(df, 1,
function(x) cbind(x[1], chunkize(x[-1], 5))))

最后,我们重命名列:

colnames(df_chunked) <- c("ID", paste0("Text", 1:5))

将同样的事情变成一个方便的函数:

chunkize_this <- function(df, n=5){
chunkize <- function(chr, n){
x <- strsplit(chr, " ")[[1]]
df <- as.data.frame(
lapply(
split(x,
cut(seq_along(x),
breaks=n)),
paste, collapse=" "),
stringsAsFactors = FALSE, col.names=NULL)
names(df) <- NULL
df
}

df_chunked <- do.call("rbind",
apply(df, 1, function(x) cbind(x[1], chunkize(x[-1], n))))
colnames(df_chunked) <- c(colnames(df)[1], paste0("Text", 1:n))
rownames(df_chunked) <- NULL
df_chunked
}

你可以试试:

View(chunkize_this(df, 3))
View(chunkize_this(df, 5))

另一个例子:

df <- read.table(h=T, text=
'ID Text
1 "This is a very long piece of string. This contains many lines."
2 "This is a very long piece of string. It contains one or two more word."
3 "Short"'
)

> chunkize_this(df, 5)
ID Text1 Text2 Text3 Text4 Text5
1 1 This is a very long piece of string. This contains many lines.
2 2 This is a very long piece of string. It contains one or two more word.
3 3 Short

关于r - 将每个数据框行文本分成五个均匀的文本 block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46502534/

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