【发布时间】:2022-02-15 19:56:51
【问题描述】:
我有一个带有成对词向量的数据框“key_words”
key_words <- data.frame( c1 = ('word1','word2'), c2 = ('word3, word4'), c3 = ('word5','word6'))
我想在另一个数据框“x”的字符列“text”中搜索这些关键词对,其中每行可以是几句话。我想在 key_words 数据框中的列的两个连续匹配之后抓取单词,并将该值插入到与找到匹配的相同索引处的表中。例如,如果在 text[1] 中一个接一个地找到 'word1' 和 'word2',那么我想抓取 text[1] 中后面的单词并将其插入到 table[1] 中。
我尝试将“文本”中的每一行拆分为一个列表,用一个空格分隔,以便每个单词在每一行中都有自己的索引。我有以下想法,这似乎非常低效,我遇到了字符值 temp_list[k] 长度为 0 的问题。
x <- x %>% mutate(text = strsplit(text, " "))
for (i in 1:ncol(key_words)) {
word1 <- key_words[i, 1]
word2 <- key_words[i, 2]
for (j in 1:length(x$text)) {
temp_list <- as.list(unlist(x$text[[j]]))
for (k in 1:length(temp_list))
if (word1 == temp_list[k]) {
if (word2 == temp_list[k + 1]) {
table$word_found[j] <- temp_list[k + 2]
}
}
}
有没有更好的方法来做到这一点,或者我可以在文本列中搜索“word1 word2”并获取下一个可以是任意长度的单词?我是 R 和一般编码的新手,但我知道我应该避免这样的嵌套循环。任何帮助将不胜感激,谢谢!
【问题讨论】:
标签: r loops nested-loops