我有10万个人

要创建一个包含"letters""LETTERS""0:9"个字符的5个字符的ID,可能的唯一组合数是多少?

set.seed(0)
    
    mydata<-data.frame(
      ID=rep(NA,10^5),
      Poids=rnorm(n=10^5,mean = 65,sd=5)
    )
    
    
    for (i in 1:nrow(mydata)){
      
      mydata$ID[i]<-c(
        paste(sample(c(0:9,LETTERS,letters),replace = F,size = 1),             
              sample(c(0:9,LETTERS,letters),replace = F,size = 1),  
              sample(c(0:9,LETTERS,letters),replace = F,size = 1),               
              sample(c(0:9,LETTERS,letters),replace = F,size = 1),
              sample(c(0:9,LETTERS,letters),replace = F,size = 1),sep = "")
      )       
    }
    
    
    table(duplicated(mydata$ID))

FALSE  TRUE 
99996     4 

推荐答案

(length(letters) + length(LETTERS) + length(0:9))^5是916132832,所以有足够的空间避免冲突.

事实上,我们可以使用这个数字来帮助生成我们的样本.我们从916132832中抽取100000个整数,不进行替换,并使用模块化数学和索引将每个数字解释为其唯一的字符串.这一切都可以在一次过程中完成:

space <- c(LETTERS, letters, 0:9)

set.seed(0)

samps <- sample(length(space)^5, 10^5)

m <- matrix("", nrow = 10^5, ncol = 5)

for(i in seq(ncol(m))) {
  m[,i] <- space[(samps %% length(space)) + 1]
  samps <- samps %/% length(space)
}

ID <- apply(m, 1, paste, collapse = "")

我们可以看到这满足了我们的要求:

head(ID)
#> [1] "vpdnq" "rK0ej" "ofE9t" "PqLIr" "6G6tu" "Vhc7R"

length(ID)
#> [1] 100000

length(unique(ID))
#> [1] 100000

在我那台普通的机器上,整个过程不到一秒钟:

   user  system elapsed 
   0.72    0.00    0.74 

Update

我突然想到,仅使用16个字符(即0-9和a-f)就可以为100000人提供一个唯一的ID,代码比上述代码更快、更简单:

set.seed(0)
ID <- as.hexmode(sample(16^5, 10^5))
head(ID)
#> [1] "d43f9" "392a7" "033a2" "cf1d7" "aa10e" "134bb"

length(unique(ID))
#> [1] 100000

这需要不到10毫秒的时间.

reprex package(v2.0.1)于2022年5月15日创建

R相关问答推荐

在通过最大似然估计将ODE模型与数据匹配时,为什么要匹配实际参数的转换值?

R形式的一维数字线/箱形图样式图表

使用R的序列覆盖

矩阵%*%矩阵中的错误:需要数字/复杂矩阵/向量参数

用黄土法确定区间

lightgbm发动机在tidymmodels中的L1正则化""

即使硬币没有被抛出,也要保持对其的跟踪

R -使用矩阵reshape 列表

自动STAT_SUMMARY统计与手动标准误差之间的差异

如何在R中使用hmm TMB提前一步预测观察到的状态?

我如何使用循环来编写冗余的Rmarkdown脚本?

删除数据帧中特定行号之间的每第三行和第四行

如何为混合模型输出绘制不同的线型?

使用&Fill&Quot;在gglot中创建 colored颜色 渐变

根据用户输入更改标记大小和 colored颜色 (R)

R:改进实现简单模型

在R中,有没有什么方法可以根据一列中的多个值来过滤行?

从字符串列中的向量中查找第一个匹配的单词

在子图内和子图之间对齐行数不均匀的表格罗布对

Ggplot2水平线和垂直线的图例图标不匹配