所以我有一个包含街道地址的数据集,它们的格式非常不同。例如:
d <- c("street1234", "Street 423", "Long Street 12-14", "Road 18A", "Road 12 - 15", "Road 1/2")
由此我想创建两列。
1. X:街道地址和
2. Y:数字+后面的所有内容。像这样:
X Y
Street 1234
Street 423
Long Street 12-14
Road 18A
Road 12 - 15
Road 1/2
到目前为止,我已经尝试过 strsplit 并在这里遵循了一些类似的问题,例如:strsplit(d, split = "(?<=[a-zA-Z])(?=[0-9])", perl = T))
。我似乎找不到正确的正则表达式。
非常感谢任何帮助。先感谢您!
字母和数字之间可能有空格,所以添加\s*
(零个或多个空格符号)在环视之间:
> strsplit(d, split = "(?<=[a-zA-Z])\\s*(?=[0-9])", perl = TRUE)
[[1]]
[1] "street" "1234"
[[2]]
[1] "Street" "423"
[[3]]
[1] "Long Street" "12-14"
[[4]]
[1] "Road" "18A"
[[5]]
[1] "Road" "12 - 15"
[[6]]
[1] "Road" "1/2"
如果您想基于此创建列,您可以利用separate
from tidyr包裹 :
> library(tidyr)
> separate(data.frame(A = d), col = "A" , into = c("X", "Y"), sep = "(?<=[a-zA-Z])\\s*(?=[0-9])")
X Y
1 street 1234
2 Street 423
3 Long Street 12-14
4 Road 18A
5 Road 12 - 15
6 Road 1/2
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)