我有一个数据框,像这样:
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,所以在答案中依赖它们是完全可以的。
3条答案
按热度按时间kdfy810k1#
请注意,要使下面的解生效,需要dplyr〉=1.10
由于
ids::Random_id
不一定生成唯一标识符r,为什么不使用name
作为唯一标识符?eivgtgni2#
你能用整数代替字符串吗?@RobertHackenAssert该函数不能保证唯一性,你总是可以沿着唯一值排序。
i5desfxk3#
最简单的方法是使用散列函数,因为当遇到相同的名称时,它总是会创建相同的散列(前提是您有防止输入空格、随机点和破折号等的措施),并且它可以很好地进行矢量化