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

How to replace only the spaces between numbers with dots

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

> 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次。我怎样才能更有效地做到这一点?

A 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")

例如:

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"   

您可以用点替换 space:

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"

另一个类似的选项是使用 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"