我想将地址解析(提取)成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