Stringr str_replace(),for循环和函数式编程失败

Stringr str_replace(), for loop and functional programming failure

如有任何关于创建 'loop' 或 'function' 的建议,我将不胜感激: 我的目标本质上是文本字符串的手动词干提取——将几个相关术语修改为一个术语。

我的代码单独执行它非常好,但如果我可以迭代它会节省我很多时间。

# dataframe of the collection of terms to be substituted into one term
Babanov_stem <- c("бабановдун", "бабановду", "бабановтун", "бабанову",  "бабановту", "бабановго", "бабановко", "бабановым", "бабановдон", "бабановтон",
           "бабанове", "бабановто", "babanova", "babanov", "babanovpresident",
           "бабанова")

Babanov_seq <- seq(1:16)

Babanov <- data_frame(Babanov_seq, Babanov_stem)

# single code works fine
tidy_KG17pre$word2 <- str_replace_all(tidy_KG17pre$word2, Babanov$Babanov_stem[15], "бабанов")

个人代码效果很好,但我真的很想迭代 - 因为我必须这样做大约 25 个学期,但要跨越 5 个候选人(Babanov 是候选人 1)

# My poor effort at a for loop
for (i in seq(Babanov$Babanov_stem)){
tidy_KG17pre$word2 <- str_replace_all(tidy_KG17pre$word, Babanov_stem[i], "бабанов")
}

# My effort at Functional Programming appears to be a bit weak too
library(purrr)
tidy_KG17pre$word2 <- tidy_KG17pre$word %>% 
map(str_replace_all, Babanov$Babanov_stem, "бабанов") %>% 
reduce(append)

如有任何关于如何使上述任何一项发挥作用的想法,我将不胜感激:)

我创建了一个假数据集来玩。

dtf <- data_frame(word = paste(Babanov_stem, "blabla"))
head(dtf)
# # A tibble: 6 x 1
#                word
#               <chr>
# 1 бабановдун blabla
# 2  бабановду blabla
# 3 бабановтун blabla
# 4   бабанову blabla
# 5  бабановту blabla
# 6  бабановго blabla

按照您的建议替换单个代码

dtf$word <- str_replace_all(dtf$word, Babanov$Babanov_stem[15], "бабанов")

使用循环将 Babanov_stem 中的任何单词替换为单词“бабанов”

for (w in Babanov$Babanov_stem){
    dtf$word <- str_replace_all(dtf$word, w, "бабанов")
}
head(dtf)
# # A tibble: 6 x 1
#             word
#            <chr>
# 1 бабанов blabla
# 2 бабанов blabla
# 3 бабанов blabla
# 4 бабанов blabla
# 5 бабанов blabla
# 6 бабанов blabla

注意:在 for 循环中不需要 seq()

上面的循环使用了就地修改。可能是不推荐函数式编程的情况。请参阅 Hadley wickham 关于高级 R 编程的书中的 Loops that should be left as is

谢谢保罗的帮助。我终于弄明白了。 最好的方法是使用 'stringr' 来调整用于在文本挖掘中提取 URL 的常用函数。该命令接受一个带有 'www.' 的字符串并将其提取并替换为 'space'

我也做了同样的事情,但我使用了候选人姓名的词干而不是 'www.'。拉丁字母或西里尔字母没问题

str_replace_all(KG17$message, "бабан[^[:blank:]]+", "babanov")