如何为R数据框按name列分组分配唯一标识符?
实现按name分组分配唯一标识符的方法
有两种简洁的方式可以用dplyr完成你的需求:
方法1:创建映射表后合并
先把唯一的name和预先生成的identifier做成匹配表,再通过关联合并把标识符附加到原数据框:
library(dplyr) library(ids) # 原数据框 topic <- c('topic1', 'topic2', 'topic3', 'topic4', 'topic5', 'topic6') name <- c('name1', 'name1', 'name1', 'name2', 'name3', 'name3') data <- data.frame(topic, name) # 生成对应数量的随机标识符 identifier <- random_id(n_distinct(data$name), 3) # 构建name与标识符的映射关系 name_id_map <- tibble(name = unique(data$name), identifier = identifier) # 合并到原数据 data_with_id <- data %>% left_join(name_id_map, by = "name")
方法2:分组后直接分配
利用dplyr的分组功能,通过cur_group_id()获取分组序号,直接匹配预先生成的标识符:
data_with_id <- data %>% group_by(name) %>% mutate(identifier = identifier[cur_group_id()]) %>% ungroup()
目标输出示例
运行后会得到如下结构的数据(标识符为random_id生成的随机字符串):
topic name identifier 1 topic1 name1 7sF-9kL 2 topic2 name1 7sF-9kL 3 topic3 name1 7sF-9kL 4 topic4 name2 2pQ-5mR 5 topic5 name3 8xZ-1bC 6 topic6 name3 8xZ-1bC
内容的提问来源于stack exchange,提问作者Madamadam
相关产品推荐
相关产品推荐

