【问题标题】:Rowwise extract common substrings from to columns in a data frame按行从数据框中的列中提取公共子字符串
【发布时间】:2020-11-21 00:51:12
【问题描述】:

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

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”都没有关系。

感谢您的帮助!

【问题讨论】:

    标签: r string string-matching


    【解决方案1】:

    也许我错过了一个智能正则表达式技巧,但一种选择是将字符串拆分为单词并使用 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           
    

    当没有匹配时返回空字符串。如果需要,您可以将空字符串转为NA

    【讨论】:

    • 这假设 A 和 B 的排序方式相同。如果他们被洗牌怎么办?
    • 当 OP 在标题中提到“rowwise”时,这就是我所理解的。
    • 好吧。我敢打赌我错过了。
    猜你喜欢
    • 2015-05-31
    • 2021-01-11
    • 1970-01-01
    • 1970-01-01
    • 2018-10-21
    • 2022-11-28
    • 2014-03-10
    • 1970-01-01
    • 2021-05-19
    相关资源
    最近更新 更多