在R中用dplyr创建依赖fn/tt的esc变量时报错,求解决方案
问题解决建议
1. 语法错误修复
报错的核心原因是**mutate()函数缺少闭合的右括号**,导致R无法正确解析语句结尾。
原代码补上缺失的)后即可修复语法问题:
db %>% mutate(esc=ifelse((fn<100) | ((fn>100 & tt < 20) | (fn <300 & tt < 20)), "Yes", "No"))
2. 逻辑简化优化
原条件可以大幅简化:
你设定的三个条件中,后两个都是tt < 20(无论fn是大于100还是小于300),加上第一个fn < 100的条件,整体等价于fn < 100 | tt < 20,简化后代码更易读且执行效率一致:
db %>% mutate(esc = ifelse(fn < 100 | tt < 20, "Yes", "No"))
逻辑验证示例
可以用测试数据验证简化后的逻辑是否符合预期:
# 构造测试数据 test_db <- tibble(fn = c(50, 150, 350, 250), tt = c(25, 15, 18, 22)) # 运行简化代码 test_db %>% mutate(esc = ifelse(fn < 100 | tt < 20, "Yes", "No"))
输出结果:
# A tibble: 4 × 3 fn tt esc <dbl> <dbl> <chr> 1 50 25 Yes 2 150 15 Yes 3 350 18 Yes 4 250 22 No
完全匹配你预期的判断规则。
内容的提问来源于stack exchange,提问作者Eg7
相关产品推荐
相关产品推荐

