在R中按ID分组判断关联列是否有多个唯一值并生成指示列
错误原因
你代码的核心问题是在mutate内调用了d$product_code,这会直接提取整个原始数据集的product_code列,而非当前分组后的组内数据,所以无论怎么分组,计算的都是全局唯一产品编码的数量,自然得不到预期结果。
正确实现代码
方法1:dplyr的n_distinct实现(更简洁)
library(dplyr) d <- d %>% group_by(ID) %>% mutate(multiple_products = as.integer(n_distinct(product_code) > 1)) %>% ungroup()
这里直接用n_distinct()计算每组内唯一product_code的数量,逻辑判断后用as.integer()直接把TRUE/FALSE转为1/0,比if_else更简洁。
方法2:沿用原有逻辑的修正版
如果要保留你原来的length(unique)写法逻辑,只需要去掉d$,直接调用列名即可,这样会读取分组后的组内列数据:
d <- d %>% group_by(ID) %>% mutate(multiple_products = if_else(length(unique(product_code)) > 1, 1, 0)) %>% ungroup()
最终输出结果
ID product_code multiple_products 1 a B78 1 2 a X31 1 3 b C12 0 4 b C12 0
完全符合需求:ID=a有2个唯一产品编码所以标记1,ID=b只有1个所以标记0。
内容的提问来源于stack exchange,提问作者logjammin
相关产品推荐
相关产品推荐

