查找 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 的每个元素。我想我必须使用 stringr
或 stringi
中的一些东西,但不确定是什么。另外,我的数据集很大,所以 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")
我正在尝试为数据框中的每一行查找两列之间的常用词。 例如我的输入是:
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 的每个元素。我想我必须使用 stringr
或 stringi
中的一些东西,但不确定是什么。另外,我的数据集很大,所以 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")