如何在分组变量上使用setdiff()对比外部有效代码列表?
解决分组对比有效代码的问题
直接修改你的代码即可实现需求,核心是在分组内提取V1的唯一值(去重后再对比,避免重复值干扰),再和Valid_codes求差集:
library(dplyr) # 假设Valid_codes是提前定义好的向量,比如:Valid_codes <- c("A", "B", "C", "D") df %>% group_by(ID, Question, Image) %>% # 每组Image值统一,直接加入分组即可,无需across mutate( # 提取分组内V1的唯一非NA值,和Valid_codes求差集,转成字符串便于存储 Missing_Codes = paste(setdiff(Valid_codes, unique(na.omit(V1))), collapse = ", ") ) %>% ungroup() # 可选:分组完成后取消分组,避免后续操作受分组影响
关键细节说明:
group_by(ID, Question, Image):因为你提到每组Image值统一,直接把它加入分组变量,这样分组后每组的Image值一致,自然保留在结果中。unique(na.omit(V1)):先去掉V1中的NA值,再去重,确保对比的是分组内实际用到的有效代码,避免NA或重复值导致差集结果错误。paste(..., collapse = ", "):把setdiff返回的向量转成字符串,这样Missing_Codes列是普通字符型,方便后续查看和处理;如果需要保留向量格式,可以去掉这一步,此时Missing_Codes会是列表列。
针对4万行的数据集,dplyr的分组操作效率足够,无需额外优化。
内容的提问来源于stack exchange,提问作者Bettina
相关产品推荐
相关产品推荐

