如何仅用点替换数字之间的空格

时间:2015-01-10 18:40:03

标签: regex r

我有一个因子变量,有几个级别表示人的财富。不幸的是,数字中的数千个用空格表示:

> levels(bron$vermogen)
 [1] "negatief"                   "0 tot 5 000 euro"           "5 000 tot 10 000 euro"     
 [4] "10 000 tot 20 000 euro"     "20 000 tot 50 000 euro"     "50 000 tot 100 000 euro"   
 [7] "100 000 tot 200 000 euro"   "200 000 tot 500 000 euro"   "500 000 tot 1 miljoen euro"
[10] "1 miljoen euro en meer"    

我想用点替换这些空格,同时保持数字和单词之间的空格。我可以用例如:

来做到这一点
bron$vermogen <- gsub("5 000 tot 10 000 euro", "5.000 tot 10.000 euro", bron$vermogen)

通过使用此方法,我必须重复此过程8次。我怎样才能更有效地做到这一点?

级别dput

c("negatief", "0 tot 5 000 euro", "5 000 tot 10 000 euro", "10 000 tot 20 000 euro", "20 000 tot 50 000 euro", "50 000 tot 100 000 euro", "100 000 tot 200 000 euro", "200 000 tot 500 000 euro", "500 000 tot 1 miljoen euro", "1 miljoen euro en meer")

3 个答案:

答案 0 :(得分:8)

例如:

gsub('([0-9]) ([0-9])','\\1.\\2',bron$vermogen)

 [1] "negatief"                   "0 tot 5.000 euro"           "5.000 tot 10.000 euro"     
 [4] "10.000 tot 20.000 euro"     "20.000 tot 50.000 euro"     "50.000 tot 100.000 euro"   
 [7] "100.000 tot 200.000 euro"   "200.000 tot 500.000 euro"   "500.000 tot 1 miljoen euro"
[10] "1 miljoen euro en meer"   

答案 1 :(得分:4)

您可以用点替换空格:

gsub("\\d\\K (?=\\d)", ".", bron$vermogen, perl = TRUE)

 # [1] "negatief"                   "0 tot 5.000 euro"          
 # [3] "5.000 tot 10.000 euro"      "10.000 tot 20.000 euro"   
 # [5] "20.000 tot 50.000 euro"     "50.000 tot 100.000 euro"  
 # [7] "100.000 tot 200.000 euro"   "200.000 tot 500.000 euro" 
 # [9] "500.000 tot 1 miljoen euro" "1 miljoen euro en meer"

答案 2 :(得分:3)

另一个类似的选择是使用lookahead / behind

gsub("(?<=\\d)\\s(?=\\d)", ".", bron$vermogen, perl = TRUE)
# [1] "negatief"                   "0 tot 5.000 euro"           "5.000 tot 10.000 euro"      "10.000 tot 20.000 euro"    
# [5] "20.000 tot 50.000 euro"     "50.000 tot 100.000 euro"    "100.000 tot 200.000 euro"   "200.000 tot 500.000 euro"  
# [9] "500.000 tot 1 miljoen euro" "1 miljoen euro en meer"