在R语言中根据CODE_UAI重复次数创建Three_CM2变量的问题
问题原因
- 你代码中的核心错误是误用了
count()函数:count()是dplyr的汇总类函数,调用后会直接输出按指定列分组的计数汇总表,无法在mutate()中为原数据集的每一行返回对应CODE_UAI的出现次数。 - 另外你代码的赋值逻辑和需求不匹配:需求是符合条件时
Three_CM2赋值为3,你原代码中写的是赋值为1。
正确实现方案
方案1:使用add_count()(可读性更高)
add_count()会保留原数据集所有行,仅新增一列存储对应分组的计数,适合该场景:
library(dplyr) Ech_final_nom_BSA <- Ech_final_nom_BSA %>% add_count(CODE_UAI, name = "tmp_count") %>% mutate(Three_CM2 = ifelse(tmp_count == 3, 3, 0)) %>% select(-tmp_count) # 不需要保留中间计数列可删除该行
方案2:使用分组+n()(无中间列)
直接按CODE_UAI分组后用n()获取当前分组的行数即可:
library(dplyr) Ech_final_nom_BSA <- Ech_final_nom_BSA %>% group_by(CODE_UAI) %>% mutate(Three_CM2 = ifelse(n() == 3, 3, 0)) %>% ungroup() # 处理完后取消分组避免后续操作受影响
内容的提问来源于stack exchange,提问作者David Potrel
相关产品推荐
相关产品推荐

