我想将地址解析(提取)成HouseNumber和Streetname。
稍后,我应该能够将提取的“值”写入新列(shops $ HouseNumber和shops $ Streetname)。

因此,可以说我有一个名为“商店”的数据框:

> shops
      Name                 city        street
 1    Something            Fakecity    New Street 3
 2    SomethingOther       Fakecity    Some-Complicated-Casestreet 1-3
 3    SomethingDifferent   Fakecity    Fake Street 14a

因此,有一种方法可以将街道列分为两个列表,一个带有街道名称,另一个用于房屋编号,包括“1-3”,“14a”之类的情况,以便最终可以将结果分配给数据框架,看起来像。
 > shops
      Name                 city        Streetname                    HouseNumber
 1    Something            Fakecity    New Street                    3
 2    SomethingOther       Fakecity    Some-Complicated-Casestreet   1-3
 3    SomethingDifferent   Fakecity    Fake Street                   14a

例如:Easyfakestreet 5-> Easyfakestreet,5

我的一些街道字符串带有连字符的街道地址并且没有数字成分,这使情况变得有些复杂。

示例:新街3-> ['新街','3']
Some-complexed-Casestreet 1-3-> ['Some-complicated-Casestreet','1-3']
假街14a-> ['假街','14a']

我将不胜感激!

最佳答案

这是一个可能的tidyr解决方案

library(tidyr)
extract(df, "street", c("Streetname", "HouseNumber"), "(\\D+)(\\d.*)")
#                 Name     city                   Streetname HouseNumber
# 1          Something Fakecity                  New Street            3
# 2     SomethingOther Fakecity Some-Complicated-Casestreet          1-3
# 3 SomethingDifferent Fakecity                 Fake Street          14a

08-20 00:36