R语言如何为数据框添加分组数值型位置标识符(dplyr兼容)
dplyr实现方案
你可以通过分组序号拼接的方式快速生成要求的位置标识符,逻辑完全匹配示例规则:
- 整数部分:按
Fruit列的类别首次出现顺序,给每个唯一类别分配从1开始的递增编号 - 小数部分:在每个
Fruit分组内,按Variety条目的出现顺序,分配从1开始的递增序号 - 最终将两部分拼接为数值型结果,保证全局唯一
完整可运行代码如下:
library(dplyr) library(tibble) # 原始测试数据 raw_df <- tibble( Fruit = c(rep("Apple", 3), rep("Pear", 2), rep("Orange", 4)), Variety = c("Gala", "Envy", "Pink Lady", "Anjou", "Bartlett", "Blood", "Seville", "Mandarin", "Bergamot") ) # 生成Position列 result_df <- raw_df %>% mutate( # 按Fruit首次出现顺序生成整数编号,避免字符排序打乱编号规则 group_int = as.integer(factor(Fruit, levels = unique(Fruit))) ) %>% mutate( # 拼接组内序号得到最终位置ID Position = group_int + row_number() / 10, .by = Fruit ) %>% select(-group_int)
运行后得到的Position列和示例完全一致,输出值为1.1, 1.2, 1.3, 2.1, 2.2, 3.1, 3.2, 3.3, 3.4,可直接传入ganttrify函数使用。
适配提示:如果单个
Fruit分组下的Variety条目数超过9个,只需要把代码里的除数10替换为100即可,小数位会自动变为两位,不会出现ID冲突。
内容的提问来源于stack exchange,提问作者jsgraydon
相关产品推荐
相关产品推荐

