【发布时间】:2022-01-09 20:28:17
【问题描述】:
我在数据框中有一列是字符向量。我想在我的数据框中添加一列,其中包含与所述列中每个唯一值相对应的唯一 ID 值/代码。这是一些玩具数据:
fnames <- c("joey", "joey", "joey", "jimmy", "jimmy", "tommy", "michael", "michael", "michael", "michael", "michael", "kevin", "kevin", "christopher", "aaron", "joshua", "joshua", "joshua", "arvid", "aiden", "kentavious", "lawrence", "xavier")
names <- as.data.frame(fnames)
要获取 fnames 的唯一值的数量,我运行:
unique_fnames <- length(unique(names$fnames))
要为每个唯一名称生成唯一 ID,我找到了以下函数:
create_unique_ids <- function(n, seed_no = 16169, char_len = 6){
set.seed(seed_no)
pool <- c(letters, LETTERS, 0:9)
res <- character(n)
for(i in seq(n)){
this_res <- paste0(sample(pool, char_len, replace = TRUE), collapse = "")
while(this_res %in% res){
this_res <- paste0(sample(pool, char_len, replace = TRUE), collapse = "")
}
res[i] <- this_res
}
res
}
将create_unique_ids 应用到unique_fnames 我得到所需数量的ID 代码:
unique_fname_id <- create_unique_ids(unique_fnames)
我的问题是这样的:
如何将unique_fname_id 的向量添加到我的数据框names?期望的结果是一个数据框names,其中有一个unique_fname_id 列,看起来像这样:
unique_fname_id <- c("VvWMKt", "VvWMKt", "VvWMKt", "yEbpFq", "yEbpFq", "Z3xCdO"...)
其中"VvWMKt"对应"joey","yEbpFq"对应"jimmy"等等。数据框 names 将与原始数据框长度相同,只是添加了这一列。
有没有办法做到这一点?欢迎和赞赏所有建议。谢谢!
编辑:我需要在create_unique_ids函数中保留set.seed,以确保生成的ID可以连续复制。
【问题讨论】: