用相同位数的随机数替换数字

时间:2018-06-29 13:50:35

标签: r gsub

我有一个包含一些数字的字符串,并用一个随机数字来使每个数字都相对。
例如。 “ 111”应替换为3个介于0到9之间的随机数字,它们之间的连接类似于“ 364”。

我的想法是匹配一个数字,获取数字的数量,计算尽可能多的随机数,然后将它们连接起来以最终替换我的匹配数:

test <- "this is 1 example 123. I like the no.37"
gsub("([0-9])", paste0(sample(0:9, nchar("\\1")), collapse = ""), test)

我的目标是有一个字符串,其中每个数字都由一个随机数字代替。例如

"this is 3 an example 628. I like the no.09"

我尝试了一些方法,但是找不到一个好的解决方案。

1 个答案:

答案 0 :(得分:3)

使用gsubfn库,它将使事情变得更简单:

library(gsubfn)
test <- "this is 1 example 123. I like the no.37"
gsubfn("[0-9]+", ~ paste0(sample(0:9, nchar(x)), collapse = ""), test)
[1] "this is 8 example 205. I like the no.37"

此处,gsubfn将匹配字符串中的所有1个或更多数字(请参见[0-9]+模式)。然后,将匹配项传递给回调函数,其中nchar获得捕获的子字符串(数字子字符串)的真实值。