R语言dplyr处理数据时特定日期编码组合列不存在报错求解
问题原因
核心报错触发逻辑如下:
当筛选日期为2021-07-09、编码为FGE时,对应数据行的DR0系列列倒序累加后没有值等于0的结果,导致mat1返回长度为0的空向量,后续拼接要删除的列名时生成了不存在的__PV字段,最终触发列不存在的报错。
修复方案
仅需在最后一步删除列的逻辑前增加非空判断,同时搭配any_of做列名存在性兜底即可,修改后的对应代码段如下:
# 前面所有代码保持不变,替换最后一段执行逻辑即可 if(length(mat1) > 0){ dropnames <- paste0(mat1,"_",mat1, "_PV") res <- SPV %>% filter(date2 == dmda, Code == CodeChosse) %>% select(-any_of(dropnames)) }else{ # 没有需要删除的列时直接返回过滤结果即可 res <- SPV %>% filter(date2 == dmda, Code == CodeChosse) } # 输出结果 res
验证说明
修改后针对2021-07-09+FGE的参数组合会直接返回对应的完整行数据,不会再触发报错,原有所有正常运行的测试用例逻辑不受任何影响。
内容的提问来源于stack exchange,提问作者user16774617
相关产品推荐
相关产品推荐

