我想在一个矢量中替换单词,这个矢量是基于另一个矢量中的原始单词和替换单词。例如:
要修改的字符串的向量:
my_words <- c("example r", "example River", "example R", "anthoer river",
"now a creek", "and another Ck", "example river tributary")
要替换的单词和相应的替换单词的一个框架:
my_replace <- data.frame(
original = c("r", "River", "R", "river", "Ck", "creek", "Creek"),
replacement = c("R", "R", "R", 'R', "C", "C", "C"))
我想用向量my_words
中my_replace$replacement
中对应的值替换my_replace$original
中出现的任何一个词。我尝试使用stringr::str_replace_all()
,但它替换了字母/单词的所有示例,而不仅仅是整个单词(例如,“另一个”变成了“另一个”),这是不可取的。
我想做的事情的伪代码:
str_replace_all(my_words, my_replace$original, my_replace$replacement)
所需输出:
"example R", "example R", "example R", "another R", "now a C", "and another C", "example R tributary"
我确实找到了一个使用for
循环的解决方案,但是考虑到我的数据集很大,for
循环选项太慢了。任何建议非常感谢。
4条答案
按热度按时间rqdpfwrv1#
下面是一种
sub
方法,它只进行一次替换:由于所有river和creek事件的替换分别为
R
和C
,因此我们可以捕获每个可能匹配项的第一个字母,然后使用这些字母的第二个版本进行替换。u4vypkhs2#
您需要从
my_words$original
中的单词构建一个基于动态单词边界的模式,然后使用stringr::str_replace_all
替换为相应的值。请注意,original
短语需要按长度降序排序,以使较长的字符串首先匹配:输出量:
正则表达式将是
\b(River|river|creek|Creek|Ck|r|R)\b
,它匹配作为一个完整单词的任何单词。mrphzbgm3#
使用
rflashtext
库可以非常简单地完成此任务:qhhrdooz4#