按行从数据框中的列中提取公共子字符串

Rowwise extract common substrings from to columns in a data frame

我想在数据框中匹配城市和地区。列有点乱,所以我想提取出现在两列中的城市/地区的名称,如下例所示。

A <- c("Berlin",
            "Hamburg",
            "Munich",
            "Stuttgart",
            "Rhein Main Frankfurt",
            "Hannover")

B <- c("Berlin Brandenburg",
             "Hamburg",
             "Munich Bayern",
             "Region Stuttgart",
             "Main Rhein Darmstadt",
             "Wiesbaden")

生成的列/数据框应如下所示:

result <- c("Berlin",
            "Hamburg",
            "Munich",
            "Stuttgart",
            "Rhein Main",
            NA
            )

df <- data.frame(A, B, result)

...虽然它是“Rhein Main”还是“Main Rhein”并不重要。

感谢您的帮助!

也许我错过了一个聪明的正则表达式技巧,但一个选择是将字符串拆分为单词并使用 intersect.

找到常用单词
df$Result <- mapply(function(x, y) paste0(intersect(x, y), collapse = " "), 
                    strsplit(df$A, '\s+'), strsplit(df$B, '\s+'))
df

#                     A                    B     Result
#1               Berlin   Berlin Brandenburg     Berlin
#2              Hamburg              Hamburg    Hamburg
#3               Munich        Munich Bayern     Munich
#4            Stuttgart     Region Stuttgart  Stuttgart
#5 Rhein Main Frankfurt Main Rhein Darmstadt Rhein Main
#6             Hannover            Wiesbaden           

此 returns 没有匹配项时为空字符串。如果需要,您可以将空字符串转换为 NA