R语言 为数据框分配分组的唯一标识符

von4xj4u  于 2023-02-26  发布在  其他
关注(0)|答案(3)|浏览(190)

我有一个数据框,像这样:

library(dplyr)
topic <- c('topic1', 'topic2', 'topic3', 'topic4', 'topic5', 'topic6')
name <- c('name1', 'name1', 'name1', 'name2', 'name3', 'name3')
data <- data.frame(topic, name)

不,我想添加一个新列,它分配的标识符对于列 name 是唯一的。我得到的标识符列表如下:

identifier <- ids::random_id(n_distinct(data$name), 3)

但是我如何像我想要的输出所示的那样按组分配标识符呢?

我使用库dplyr和tidyr,所以在答案中依赖它们是完全可以的。

kdfy810k

kdfy810k1#

请注意,要使下面的解生效,需要dplyr〉=1.10

mutate(data, identifier = ids::random_id(1,3), .by = name)

   topic  name identifier
1 topic1 name1     a1d197
2 topic2 name1     a1d197
3 topic3 name1     a1d197
4 topic4 name2     25c362
5 topic5 name3     edd84b
6 topic6 name3     edd84b

由于ids::Random_id不一定生成唯一标识符r,为什么不使用name作为唯一标识符?

eivgtgni

eivgtgni2#

你能用整数代替字符串吗?@RobertHackenAssert该函数不能保证唯一性,你总是可以沿着唯一值排序。

data$id <- match(data$name, unique(data$name))
data
#    topic  name id
# 1 topic1 name1  1
# 2 topic2 name1  1
# 3 topic3 name1  1
# 4 topic4 name2  2
# 5 topic5 name3  3
# 6 topic6 name3  3
i5desfxk

i5desfxk3#

最简单的方法是使用散列函数,因为当遇到相同的名称时,它总是会创建相同的散列(前提是您有防止输入空格、随机点和破折号等的措施),并且它可以很好地进行矢量化

require(openssl)
topic <- c('topic1', 'topic2', 'topic3', 'topic4', 'topic5', 'topic6')
name <- c('name1', 'name1', 'name1', 'name2', 'name3', 'name3')
data <- data.frame(topic, name)

 

data$ids<-md5(data$name)

相关问题