vch*_*ngs 2 regex awk split substring r
我有一个带有意大利街道名称和地址的文件,我必须将地址栏分成街道名称和街道号码.捕获的是地址有两个或三个字符串,然后数字或数字有时也有字符,例如15/a其中一些有12-Maggio 23的地址,我的拆分应该是第一列12-maggio和第二列23.
以下是文件的格式
Street.adress
Falcone N. 1
Fortunato Giustino 2
Pisacane 3
Fabrizio De Andre' 8
S. Satta 7
Agnesi 16
Volturno Cigni 80
Montepenice 6
Cucchiari 15
Molinetto Di Lorenteggio 15/T 7
Don Minzoni 15
Senigallia 4
Milano 38/A
L. Da Vinci 13/A
27-Novembre 9
Run Code Online (Sandbox Code Playgroud)
输出应该在2个单独的列中
Falcone N. 1
Fortunato Giustino 2
Pisacane 3
Fabrizio De Andre' 8
S. Satta 7
Agnesi 16
Volturno Cigni 80
Montepenice 6 6
Cucchiari 15
Molinetto Di Lorenteggio 15/T 7
Don Minzoni 15
Senigallia 4
Milano 38/A
L. Da Vinci 13/A
27-Novembre 9
Run Code Online (Sandbox Code Playgroud)
我怎么能实现这一点,我已经尝试了excel公式,也没有解压缩但不起作用.我在R中试过下面的代码但它失败了,所以我该怎么做呢?
for (i in 1:nrow (df)) {
new_df [i,"Street.Name"] <- unlist(strsplit (df[["Street.Addresses"]], " ")[i])[1]
new_df [i,"Street.Number"] <- paste (unlist(strsplit (df[["Street.Addresses"]], " ")[i])[-1], collapse = " ")
}
Run Code Online (Sandbox Code Playgroud)
试着
df <- gsub("$([0-9]+ +)?(.*)", "\\1\t\\2", df)
Run Code Online (Sandbox Code Playgroud)
什么都行不通.任何线索
此正则表达式与您提供的数据相结合gsub()并strsplit()对其进行处理.
这里的技巧是我首先\t在我要分割字符串的位置插入一个,然后使用strsplit()with \t作为分隔符.
x <- read.table(sep = "\n",
header = TRUE,
quote = "\"",
text = "Street.adress
Falcone N. 1
Fortunato Giustino 2
Pisacane 3
Fabrizio De Andre' 8
S. Satta 7
Agnesi 16
Volturno Cigni 80
Montepenice 6
Cucchiari 15
Molinetto Di Lorenteggio 15/T 7
Don Minzoni 15
Senigallia 4
Milano 38/A
L. Da Vinci 13/A
27-Novembre 9"
)
pattern <- "(.*?) +(\\d+.*)"
z <- gsub(pattern, "\\1\t\\2", x[[1]])
unlist(
strsplit(z, "\t")
)
Run Code Online (Sandbox Code Playgroud)
结果:
[1] "Falcone N." "1"
[3] "Fortunato Giustino" "2"
[5] "Pisacane" "3"
[7] "Fabrizio De Andre'" "8"
[9] "S. Satta" "7"
[11] "Agnesi" "16"
[13] "Volturno Cigni" "80"
[15] "Montepenice" "6"
[17] "Cucchiari" "15"
[19] "Molinetto Di Lorenteggio" "15/T 7"
[21] "Don Minzoni" "15"
[23] "Senigallia" "4"
[25] "Milano" "38/A"
[27] "L. Da Vinci" "13/A"
[29] "27-Novembre" "9"
Run Code Online (Sandbox Code Playgroud)
PS.编辑答案以处理'输入数据中有引用的事实.要处理这个问题,你必须设置quote = "\""为参数,read.table()否则将跳过某些行.