R:如何使用存储在单独数据框中的目标词和替换词来搜索字符串?
R: How to search a character string using target and replacement words stored in a separate dataframe?
从这样的输入字符串开始:
goats <- c("he gets her goat. they get her dog. i get my elephant.")
我的目标是从应用于原始 chr 字符串对象 (goats) 的单独数据框中 gsub 搜索和替换术语列表。这是一个非常简单的例子,说明了这样一个数据框的样子。
我的正则表达式语法的问题是它在目标列表的第一行应用于文本对象后停止。我想继续遍历目标列表,直到用尽所有术语。我试过了:
newgoat <- character()
for (row in 1:seq_along(targlist$target)) {
newgoat <- gsub(targlist$target, targlist$replacement, goats)
}
我的输出是:
for
循环中存在一些问题 -
1:seq_along(targlist$target)
不正确。 seq_along(targlist$target)
已经为您提供了要迭代的索引。
- 您应该在循环中使用行索引对
targlist$target
和 targlist$replacement
进行子集,即 i
.
- 在循环中
goats
根本没有改变,您应该在 newgoat
上应用 gsub
。
targlist <- data.frame(target = c('goat', 'dog', 'elephant'),
replacement = c('banana', 'apple', 'pear'))
newgoat <- goats
for (i in seq_along(targlist$target)) {
newgoat <- gsub(targlist$target[i], targlist$replacement[i], newgoat)
}
newgoat
#[1] "he gets her banana. they get her apple. i get my pear."
还有一个非循环版本str_replace_all
-
stringr::str_replace_all(goats, setNames(targlist$replacement, targlist$target))
#[1] "he gets her banana. they get her apple. i get my pear."
从这样的输入字符串开始:
goats <- c("he gets her goat. they get her dog. i get my elephant.")
我的目标是从应用于原始 chr 字符串对象 (goats) 的单独数据框中 gsub 搜索和替换术语列表。这是一个非常简单的例子,说明了这样一个数据框的样子。
我的正则表达式语法的问题是它在目标列表的第一行应用于文本对象后停止。我想继续遍历目标列表,直到用尽所有术语。我试过了:
newgoat <- character()
for (row in 1:seq_along(targlist$target)) {
newgoat <- gsub(targlist$target, targlist$replacement, goats)
}
我的输出是:
for
循环中存在一些问题 -
1:seq_along(targlist$target)
不正确。seq_along(targlist$target)
已经为您提供了要迭代的索引。- 您应该在循环中使用行索引对
targlist$target
和targlist$replacement
进行子集,即i
. - 在循环中
goats
根本没有改变,您应该在newgoat
上应用gsub
。
targlist <- data.frame(target = c('goat', 'dog', 'elephant'),
replacement = c('banana', 'apple', 'pear'))
newgoat <- goats
for (i in seq_along(targlist$target)) {
newgoat <- gsub(targlist$target[i], targlist$replacement[i], newgoat)
}
newgoat
#[1] "he gets her banana. they get her apple. i get my pear."
还有一个非循环版本str_replace_all
-
stringr::str_replace_all(goats, setNames(targlist$replacement, targlist$target))
#[1] "he gets her banana. they get her apple. i get my pear."