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")
如有任何关于创建 '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")