假定以下字符向量与数字格式不一致:
myvec <- c( '50% of population live in block 50 number 27-04',
'And 1% of population live in block 8 number 1-42',
'And 1% of population live in block 5B number 1-8',
'60% of population live in block 1641 number 17-23',
'80% of population live in block 677B number 5-3')
我想要一种一致的数字格式,以使每个数字都至少包含两位数:
c( '50% of population live in block 50 number 27-04',
'And 01% of population live in block 08 number 01-42',
'And 01% of population live in block 05B number 01-08',
'60% of population live in block 1641 number 17-23',
'80% of population live in block 677B number 05-03')
如果更容易将所有数字都设为4位(最大位数),也可以:
c( '0050% of population live in block 0050 number 0027-0004',
'And 0001% of population live in block 0008 number 0001-0042',
'And 0001% of population live in block 0005B number 0001-0008',
'0060% of population live in block 1641 number 0017-0023',
'0080% of population live in block 0677B number 0005-0003')
重要的是,所有具有相同数字位数的数字都应采用相同的格式。最后,我想读出块和编号(例如“ 50号块编号27-04”)并检查重复项(实际矢量要长得多,并且由块和编号中的重复项组成,但之前带有不同的文本)-目前我无法做到这一点,因为字符串的开头可能会有所不同。
我尝试了一些类似的方法,gsub("(\\d)+", "0\\1", myvec)
但没有成功。
谢谢!
我们可以使用stringr::str_replace_all
将字符串中的所有数字替换为4位数字。
stringr::str_replace_all(myvec, "\\d+", function(m) sprintf("%04s", m))
#[1] "0050% of population live in block 0050 number 0027-0004"
#[2] "And 0001% of population live in block 0008 number 0001-0042"
#[3] "And 0001% of population live in block 0005B number 0001-0008"
#[4] "0060% of population live in block 1641 number 0017-0023"
#[5] "0080% of population live in block 0677B number 0005-0003"
您可以用输出中所需的位数替换"%04s"
part in sprintf
。
由于某种原因,该方法%04s
仅对我有效。%04d
将提取的部分转换为整数后,我们可以按照@Jaap的建议使用。
stringr::str_replace_all(myvec, "\\d+", function(m) sprintf("%04d", as.integer(m)))
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句