separate(data.frame(A = d-6ren">
gpt4 book ai didi

r - 如何仅在第一个数字上分割字符串

转载 作者:行者123 更新时间:2023-12-04 10:03:13 26 4
gpt4 key购买 nike

所以我有一个包含街道地址的数据集,它们的格式非常不同。例如:

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"

如果您想基于此创建列,您可以利用 tidyr 包中的 separate :
> 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

关于r - 如何仅在第一个数字上分割字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42133934/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com