嗨,我需要清理一个大的地址数据帧。其中一个问题是我希望用不需要的空格替换数字和后缀,如下所示
original <- c("73 A Acacia Avenue","656 B East Street", " FLAT 1 D High Road", "66B West Street")
corrected <- c("73A Acacia Avenue","656B East Street", " FLAT 1D High Road")
我可以使用grep和regexpr识别并隔离我想要更改的内容,但我不确定如何删除有问题的空间并替换原始数据框中的更正
reg <- "([0-9]+ [A-Z] )"
grep(reg, original, value = T, perl =T) # finds match
grep(reg, original, perl =T) # finds match row
regexpr(reg,match) # finds position
findstr <- regmatches(match,r) # show relevant string
所以我的最后阶段是删除空白并应用更正。 任何帮助表示赞赏
谢谢
答案 0 :(得分:1)
您可以使用gsub
与您的(有点修改)正则表达式和\1\2
替换:
original <- c("73 A Acacia Avenue","656 B East Street", " FLAT 1 D High Road", "66B West Street")
reg <- "([0-9]+)\\s([A-Z]\\s+)"
gsub(reg, "\\1\\2", original)
## => [1] "73A Acacia Avenue" "656B East Street" " FLAT 1D High Road" [4] "66B West Street"
请参阅online R demo。
<强>详情:
([0-9]+)
- 第1组匹配一个或多个数字\\s
- 空白([A-Z]\\s+)
- 第2组匹配大写的ASCII字母,然后是1个或多个空格。替换为\1\2
,其中\1
是第一组的值,\2
引用第二组中的值。