R语言基于Groupid与School双条件生成唯一分组ID的实现问题
原有代码问题说明
- 你混用了dplyr的
group_by()和base R的transform(),transform()无法识别dplyr的分组结构,你设置的按School分组实际没有生效,生成的id是全局Groupid转因子的数值,才会出现不同School同Groupid的id重复问题。 - 你的需求是为每个
(School, Groupid)的唯一组合分配全局递增的唯一id,不需要在School内部分组单独编号。
修正后代码
写法1(最简洁,用dplyr内置分组编号函数)
library(dplyr) data1 <- data %>% # 直接为每个(School, Groupid)唯一组合按首次出现顺序生成全局id mutate(id = group_indices(., School, Groupid)) %>% relocate(id, .before = Groupid)
写法2(手动生成组合因子,兼容性更强)
library(dplyr) data1 <- data %>% # 生成组合字段,按首次出现顺序设置因子水平后转数值 mutate(id = as.numeric(factor(paste(School, Groupid, sep = "_"), levels = unique(paste(School, Groupid, sep = "_"))))) %>% relocate(id, .before = Groupid)
两种写法运行后输出都和你给出的期望结果完全一致。
内容的提问来源于stack exchange,提问作者Yebelay Berehan
相关产品推荐
相关产品推荐

