r - 使用 stringi 在 R 中生成唯一的随机字符串

标签 r string random stringi

我有数据,其中每一行都是一个人。我想制作一个随机生成的唯一 ID,以便在分析中识别它们。

这是一个示例数据框

df <- data.frame(
  gender = rep(c("M", "F", "M", "M", "F"), 1000),
  qtr = sample(c(1:99), 50000, replace = T),
  result = sample(c(100:1000), 50000, replace = T)
)

要生成唯一 ID,我使用的是 stringi

library(stringi)
library(magrittr)
library(tidyr)

df <- df %>%
  mutate(UniqueID = do.call(paste0, Map(stri_rand_strings, n=50000, length=c(2, 6),
                                        pattern = c('[A-Z]', '[0-9]'))))

但是,当我测试新变量 UniqueID 是否唯一时,通过运行这段代码,我发现有一些重复项。

length(unique(unlist(df[c("UniqueID")])))

有没有一种方法可以生成真正唯一且没有重复的唯一 ID?

我看到了这些问题,但没有回答如何使生成的随机数唯一。 Generating unique random numbers in dataframe column in R Create a dataframe with random numbers in each column

谢谢

最佳答案

您可以使用 ids 包自动创建唯一 ID。例如,要创建 1000 万个用户 ID,您可以使用:

randos <- ids::random_id(1E6, 4)
# The 2nd term here controls how many bytes are assigned to each ID.
# The default, 16 bytes, makes much longer IDs and crashes my computer

head(randos)
#[1] "31ca372d" "d462e55f" "2374cc78" "15511574" "ecbf2d65" "236cb2d3"

它还有其他不错的功能,例如 adjective_animal 函数,它创建的 ID 更易于人类区分和内存。

creatures <- ids::adjective_animal(1E6, n_adjectives = 1)
head(creatures)
#[1] "yestern_lizard"          "insensible_purplemarten"
#[3] "cubical_anhinga"         "theophilic_beaver"      
#[5] "subzero_greyhounddog"    "hurt_weasel"   

关于r - 使用 stringi 在 R 中生成唯一的随机字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58228092/

相关文章:

css - 如何更改 Leaflet for R 中的标题文本颜色?

c# - 字符串或其他密封类的强类型

algorithm - 该算法是否产生均匀随机排列?

r - 如何在 ESS/Emacs 中设置 R 进程的后台?

r - 在 as.numeric() 中避免 NA

.net - .NET 资源文件字符串是否被保留?

java - 仅使用 Random 而不使用 ArrayList 写入不重复的随机数

mysql程序 - 从五个数字中随机数

python - 等同于 Python 中 R 的 removeSparseTerms

python - 如何在Python中使用日期将数据框列拆分为多列