【问题标题】:If a string matches in field A, duplicate row and add second string to row B如果字符串在字段 A 中匹配,则复制行并将第二个字符串添加到 B 行
【发布时间】:2021-12-13 01:08:16
【问题描述】:

我在“残差”字段中有一个带有文本(地区)的数据框。我想搜索那个字段,如果找到一组关键词中的一个词,则重复该行,并将附加到该关键词的相应单词添加到字段“国家”

例如,如果在残差中发现单词“Alabama”,则该行被复制,并且单词“USA”从键集中与 Alabama 关联的“代码”中添加到国家/地区字段。

strsplit 沿列而不是行拆分,并且separate_rows 需要一个公共分隔符,所以我很快就超出了我的深度......

虚拟数据:

keys <- data.frame(key=c("Canada", "Alabama", "Maryland"), codes=c("CAN", "USA", "USA"))


df <- data.frame(residual=c("Canada, Alabama, Maryland line","Austria","Denver and Boulder","Alabama"),
             country=c("America","Austria","America","America"),
             otherfields=c("foo","foo","foo","foo"))

期望的输出:

result <- data.frame(residual=c("Canada, Alabama, Maryland line",
                            "Canada, Alabama, Maryland line",
                            "Canada, Alabama, Maryland line",
                            "Canada, Alabama, Maryland line",
                            "Austria",
                            "Denver and Boulder",
                            "Alabama",
                            "Alabama"
                            ),
                 country=c("America",
                           "CAN",
                           "USA",
                           "USA",
                           "Austria",
                           "America",
                           "America",
                           "USA"),
                 otherfields=c("foo","foo","foo","foo","foo","foo","foo","foo"))

【问题讨论】:

    标签: r split duplicates rows


    【解决方案1】:

    tidyverse 选项可能如下所示。

    library(tidyverse)
    
    df %>%
      mutate(country = str_extract_all(residual, str_c(keys$key, collapse = '|')),
             country = map(country, ~ str_replace_all(., deframe(keys)))) %>%
      unnest(country, keep_empty = TRUE)
    
    # A tibble: 6 x 3
    #   residual                       country otherfields
    #   <chr>                          <chr>   <chr>      
    # 1 Canada, Alabama, Maryland line CAN     foo        
    # 2 Canada, Alabama, Maryland line USA     foo        
    # 3 Canada, Alabama, Maryland line USA     foo        
    # 4 Austria                        NA      foo        
    # 5 Denver and Boulder             NA      foo        
    # 6 Alabama                        USA     foo
    

    【讨论】:

    • 它正在拆分“Denver 和 Boulder”——据我所知,很难将其识别为单个字符串...有没有一种方法可以让我们将 NA 返回到国家/地区字段而不是如果匹配不是由“键”组成的,则剩余?事后看来,这可能是我想要的更多
    • @BortEdwards:我为这个错误道歉。我已更新我的帖子以更正错误并列出与keys 不匹配的NA
    • @BortEdwards:如果它解决了您的问题,请考虑接受和/或投票。
    猜你喜欢
    • 1970-01-01
    • 2015-12-18
    • 1970-01-01
    • 1970-01-01
    • 2013-10-27
    • 2021-12-06
    • 2016-10-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多