gpt4 book ai didi

r - 强制使用 mapply 是否有解决方法

转载 作者:行者123 更新时间:2023-12-04 10:28:09 24 4
gpt4 key购买 nike

我有一个带有单列“条款”的data.frame。它可以包含多个单词的字符串。每个词至少包含两个词或更多,没有上限。

从“条款”这一列中,我想提取最后一个单词并将其存储在一个新的“最后”列中。

# load library
library(dplyr)
library(stringi)

# read csv
df <- read("filename.txt",stringsAsFactors=F)

# show df
head(df)

# Term
# 1 this is for the
# 2 thank you for
# 3 the following
# 4 the fact that
# 5 the first

我准备了一个函数 LastWord ,当给出单个字符串时它运行良好。
但是,当给定字符串向量时,它仍然适用于向量中的第一个字符串。这迫使我在与 mapply 一起使用时使用 mutate ,以添加如下所示的列。
LastWord <- function(InputWord) {
stri_sub(InputWord,stri_locate_last(str=InputWord, fixed=" ")[1,1]+1, stri_length(InputWord))
}

df <- mutate(df, Last=mapply(LastWord, df$Term))

使用 mapply 会使过程非常缓慢。我通常需要一次处理大约 10 到 1500 万行或术语。这需要几个小时。

有人可以建议一种创建可与vector而不是字符串一起使用的 LastWord函数的方法吗?

最佳答案

你可以试试:

df$LastWord <- gsub(".* ([^ ]+)$", "\\1", df$Term)
df
# Term LastWord
# 1 this is for the the
# 2 thank you for for
# 3 the following following
# 4 the fact that that
# 5 the first first

gsub 调用中,括号之间的表达式至少匹配字符串末尾的任何非空格(而不是 [^ ]+[a-zA-Z]+ 也可以)( $ )。它位于括号之间的事实允许使用 \\1 捕获表达式。所以 gsub 只保留括号之间的内容作为替换。

编辑:
正如@akrun 在评论中提到的,在这种情况下,也可以使用 sub 代替 gsub

关于r - 强制使用 mapply 是否有解决方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29601536/

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