使用R计算一对单词在文本文件中同时出现的次数

使用R计算一对单词在文本文件中同时出现的次数,r,string,equivalence,R,String,Equivalence,我有一个函数,它包含一个文本文档和两个单词,我想在文本中找到它们,我试图计算出这两个单词在文本中相邻出现的概率。 所以我做的第一件事就是把它们配对。我的文档称为“words”,函数有3个参数:文档、word1和word2。我想知道它们在文本中出现的次数 pairs <- c() # Iterates through and creates every possible pair of adjacent words for (i in 1:(length(words)-1)) {

我有一个函数,它包含一个文本文档和两个单词,我想在文本中找到它们,我试图计算出这两个单词在文本中相邻出现的概率。 所以我做的第一件事就是把它们配对。我的文档称为“words”,函数有3个参数:文档、word1和word2。我想知道它们在文本中出现的次数

pairs <- c()
  # Iterates through and creates every possible pair of adjacent words
  for (i in 1:(length(words)-1)) {
    temp <- paste(words[i],words[i+1], sep = ":") # Temporarily group adjacent words together with a : in between
    temp <- sort(strsplit(temp, ":")[[1]]) # Sort to get them lexically organized 
    pairs[i] <- paste(temp[1], temp[2], sep=":") # Store this pair in the list
  }

如何让R理解我希望这些单词1:word2和word2:word1对中的每一个都是两个特定的单词,并且当我有了正确的组合时,在计数器中添加一个+1?

如果您的文档被拆分为一个单词对列表,您不应该需要for循环

例如,如果您有如下字符串:

test <- "hello my name is my name is tony"

test下面是我要做的。假设您有一个称为
单词的单词向量

library(dplyr)

# use lead from dplyr to create all pairs of adjacent words
word.pairs <- paste(words, lead(words), sep=":")

# use dplyr to sum up all pairs of words
word.pairs <- as.data.frame(word.pairs) %>%
  group_by(word.pairs) %>%
  summarise(Count = n())

您是否尝试过if(i==粘贴(word1,word2)| i==粘贴(word2,word1))?建议您使用测试数据集提出此问题,如果数据以多行数据的形式存在,那么请说明如果单词对之间有换行符,您打算怎么做。谢谢!比我试图记录的要快得多的传统智慧是避免R中的循环。如果你在谷歌上快速搜索,你可以找到很多详细的解释。
test <- "hello my name is my name is tony"
pairs <- list("hello my", "my name", "name is", "is my", "my name", "name is", "is tony")
appearance <- length(pairs[pairs == "my name"|pairs == "name my"]) # 2
pairs2 <- length(pairs[pairs == paste(word1, word2) | pairs == paste(word2, word1)])
library(dplyr)

# use lead from dplyr to create all pairs of adjacent words
word.pairs <- paste(words, lead(words), sep=":")

# use dplyr to sum up all pairs of words
word.pairs <- as.data.frame(word.pairs) %>%
  group_by(word.pairs) %>%
  summarise(Count = n())
word.pairs %>% filter(word.pairs == paste(word1, word2, sep=":"))