查找 2 列中字符串之间的交集

Find the intersection between strings in 2 columns

我正在尝试为数据框中的每一行查找两列之间的常用词。 例如我的输入是:

C1                | C2
Roy goes to Japan | Roy goes to Australia 
I go to Japan     | You go to Japan

我需要一个附加的列作为

C1                | C2                    | Result
Roy goes to Japan | Roy goes to Australia | Roy goes to
I go to Japan     | He goes to Japan      | to Japan

我试过 intersect 但它给了我 C1 和 C2 之间的交集,而不是 C1 和 C2 的每个元素。我想我必须使用 stringrstringi 中的一些东西,但不确定是什么。另外,我的数据集很大,所以 fast 会很好。

您可以在空格处拆分字符串,然后使用 intersect 查找常用词。

df$result <- mapply(function(x, y) paste0(intersect(x, y), collapse = " "),
                    strsplit(df$C1, '\s'), strsplit(df$C2, '\s'))
df
#                 C1                    C2      result
#1 Roy goes to Japan Roy goes to Australia Roy goes to
#2     I go to Japan      He goes to Japan    to Japan

你也可以用 tidyverse 来做到这一点:

library(tidyverse)
df %>%
  mutate(result = map2_chr(str_split(C1, '\s'), str_split(C2, '\s'), 
                           ~str_c(intersect(.x, .y), collapse = " ")))

数据

df <- structure(list(C1 = c("Roy goes to Japan", "I go to Japan"), 
    C2 = c("Roy goes to Australia", "He goes to Japan")), row.names = c(NA, 
-2L), class = "data.frame")