是否有一种R技术可以对长数据结构进行分组、搜索和匹配?

是否有一种R技术可以对长数据结构进行分组、搜索和匹配?,r,boolean,match,tidyverse,text-mining,R,Boolean,Match,Tidyverse,Text Mining,这是从每个id的5个单词列表中查找哪个id具有匹配的words的问题 我们有一个很长的数据结构,它来自一个文本挖掘项目,具有id和word。每组有5个单词。我们想测量一个id中的哪些单词在另一个id中。i、 e.根据这些单词,哪些id是相似的 我们尝试在[row,column]上使用for循环,但似乎有更好的方法 library(tidyverse) data <- tibble(id = factor(c(1234, 1234, 1234, 1234, 1234,

这是从每个
id
的5个单词列表中查找哪个
id
具有匹配的
word
s的问题

我们有一个很长的数据结构,它来自一个文本挖掘项目,具有
id
word
。每组有5个单词。我们想测量一个id中的哪些单词在另一个id中。i、 e.根据这些单词,哪些id是相似的

我们尝试在[row,column]上使用for循环,但似乎有更好的方法

library(tidyverse)

data <- tibble(id = factor(c(1234, 1234, 1234, 1234, 1234, 
                             4523, 4523, 4523, 4523, 4523, 
                             0984, 0984, 0984, 0984, 0984)),
       word = c("hello", "today", "the", "monkey", "boy",
                "go", "me", "key", "wind", "hello",
                "monkey", "yes", "no", "wild", "quit"))


output <- matrix(1, length(data$id), length(data$id))

for (j in 1 : length(data$id)) {
  for (i in 1 : length(data$id)) {
    output[i,j] <-  data[i,2] == data[j,2]

  }
}

output

## from the output we see that 4 and 11 match.

data[4,]
data[11,]


欢迎任何关于完全重新组织数据结构或使用此结构的解决方案的建议。谢谢

我们可以通过
id
单词
拆分,然后使用带有自定义函数的
outer
来计算单词在不同
id
之间出现的次数

count_value <- function(x, y) {
    colSums(mapply(`%in%`, x, y))
}

outer(split(data$word, data$id),split(data$word, data$id), count_value)

#     984 1234 4523
#984    5    1    0
#1234   1    5    1
#4523   0    1    5

count\u value我们可以
id
拆分
单词
,然后使用
outer
和自定义函数计算单词在不同
id
之间出现的次数

count_value <- function(x, y) {
    colSums(mapply(`%in%`, x, y))
}

outer(split(data$word, data$id),split(data$word, data$id), count_value)

#     984 1234 4523
#984    5    1    0
#1234   1    5    1
#4523   0    1    5

count\u值我们可以通过
tcrossprod
base R

tcrossprod(table(data))
#   id
#id     984 1234 4523
#  984    5    1    0
#  1234   1    5    1
#  4523   0    1    5

或者使用
tidyverse

library(tidyverse)
count(data, id, word) %>%
     spread(word, n, fill = 0) %>%
     column_to_rownames('id') %>% 
     as.matrix %>% 
     tcrossprod
#      984 1234 4523
#984    5    1    0
#1234   1    5    1
#4523   0    1    5

我们可以通过
tcrossprod
base R

tcrossprod(table(data))
#   id
#id     984 1234 4523
#  984    5    1    0
#  1234   1    5    1
#  4523   0    1    5

或者使用
tidyverse

library(tidyverse)
count(data, id, word) %>%
     spread(word, n, fill = 0) %>%
     column_to_rownames('id') %>% 
     as.matrix %>% 
     tcrossprod
#      984 1234 4523
#984    5    1    0
#1234   1    5    1
#4523   0    1    5

尽管如此,我还是想按
id
对u进行分组,看看每个
id
与另一个
id
匹配的单词有多少,我添加了一个示例输出,显示了每个
id
之间匹配的
word
的数量,我想按
id
对u进行分组,看看每个
id
与另一个
id
匹配的单词数量。我添加了一个示例输出,显示每个
id
之间匹配的
word
的数量