【问题标题】:R extract house / street numers from adress stringR从地址字符串中提取房屋/街道号码
【发布时间】:2021-03-15 10:11:46
【问题描述】:

假设我有以下带有地址的数据,即街道名称。我的目标是将街道名称与门牌号码分开。

mydf <- tribble(
  ~street,
  "Some Way 10",
  "Shiny Street   12b",
  "Dark Street   from Netflix Movie 17c - 17d",
  "Seasame Street",
  "Dark Alley 15c",
)

mydf <- mydf %>% mutate(street= str_squish(street)) # get rid of whitespace

我尝试了以下

sub <- tidyr::extract(mydf, "street", c("street_name_only", "house_number"), "(\\D+)(\\d.*)") %>%
 print(n=5)

只要有街道或门牌号码,它就可以正常工作。如果字符串“street”没有街道号码,则 NA 将显示在新变量“street_name_only”和“house_number”中,就像“芝麻街”一样。 (我想在“new_street_column”中有“Sesame Street”,最好在 house_number 列中有“”(空),尽管之后我可以在 house_number 列中管理 NA。

谁能告诉我哪里出错以及如何解决这个问题?

非常感谢您。

【问题讨论】:

    标签: r extract tidyr


    【解决方案1】:

    这行得通吗:

    mydf %>% 
        transmute(street_name_only = str_remove(street, '\\d.*'), 
                      house_number = str_extract(street, '\\d.*'))
    
    # A tibble: 5 x 2
      street_name_only                  house_number
      <chr>                             <chr>       
    1 "Some Way "                       10          
    2 "Shiny Street "                   12b         
    3 "Dark Street from Netflix Movie " 17c - 17d   
    4 "Seasame Street"                  NA          
    5 "Dark Alley "                     15c      
    

    【讨论】:

    • 是的,确实如此!非常感谢!我知道您使用的功能,但我没想过将它们组合在一起!再次感谢。
    【解决方案2】:

    使用tidyr::separate

    tidyr::separate(mydf, street, c("street_name_only", "house_number"), 
                    '(?=\\d)', extra = 'merge', fill = 'right')
    
    # street_name_only                    house_number
    #  <chr>                               <chr>       
    #1 "Some Way "                         10          
    #2 "Shiny Street   "                   12b         
    #3 "Dark Street   from Netflix Movie " 17c - 17d   
    #4 "Seasame Street"                    NA          
    #5 "Dark Alley "                       15c         
    

    【讨论】:

      猜你喜欢
      • 2014-03-25
      • 2018-07-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-10
      相关资源
      最近更新 更多