R语言使用mutate搭配case_when生成异常列名的原因是什么
错误原因
你代码的问题出在mutate()函数的参数部分:你给dara = case_when(...)的整段赋值逻辑额外套了一层多余的括号,这会导致dplyr无法正确识别你指定的列名dara,而是把括号内的整个表达式作为列名来源,最终生成带括号的异常列名。
修正代码
删除mutate内部多余的外层括号即可,正确写法如下:
Data <- Data %>% mutate(dara = case_when( HIV_result == 1 & vSupressed == 1 ~ 0, HIV_result == 1 & vSupressed == 0 & Condomlessex == "Yes" ~ 1, HIV_result == 1 & vSupressed == 0 & Condomlessex == "No" & (Y_chromosome == 1|STI == 1) ~ 1, HIV_result == 1 & vSupressed == 0 & Condomlessex == "No" & (Y_chromosome == 0 & STI == 0) ~ 0, TRUE ~ 0 ))
额外注意事项
- 你构造测试数据集时命名为
dAMETHIST,但后续处理调用的数据集名是Data,运行代码前需要将两者统一,避免出现找不到对象的报错。 - 你当前构造数据集时用
data.frame(cbind(向量列表))的写法存在隐患:cbind()会自动把所有向量转为统一类型,你代码里包含字符型向量currentPREP、Condomlessex,直接cbind会把原本是数值型的HIV_result等列也强制转为字符型,影响后续逻辑判断,建议直接去掉cbind,写法调整为:dAMETHIST <- data.frame(HIV_result, vSupressed, Condomlessex, Y_chromosome, STI, currentPREP, PrEPtest)
内容的提问来源于stack exchange,提问作者Sanni
相关产品推荐
相关产品推荐

