如何在R语言中编写符合航班延误收费规则的if else语句?
R语言中正确编写延误收费逻辑的if_else语句
你的代码存在几个关键问题,导致运行报错:
- 变量名大小写不一致:代码里混用了
departure_delay和DEP_DELAY,R对变量名大小写敏感,这会触发"变量未找到"的错误。 - 条件逻辑错误+类型不匹配:将数值型的延误时长和字符串
'16'、'15'比较,应该直接用数值;同时>= '16'|DEP_DELAY<='15'的逻辑完全混乱,实际我们需要判断的是延误时长是否超过15分钟。 - 返回值类型不统一:
if_else要求两个分支返回相同数据类型,你一个分支返回数值(75*departure_delay),另一个返回字符串"0",这会触发类型不匹配的报错。
修正后的代码:
假设你使用dplyr的mutate函数,且数据框中的延误时长变量统一为departure_delay(数值型),正确代码如下:
library(dplyr) # 替换df为你的实际数据框名称 df <- df %>% mutate(`Departure Delay charges` = if_else(departure_delay > 15, 75 * departure_delay, 0))
额外处理建议:
如果你的departure_delay是字符型,需要先转换为数值型:
df <- df %>% mutate(departure_delay = as.numeric(departure_delay)) %>% mutate(`Departure Delay charges` = if_else(departure_delay > 15, 75 * departure_delay, 0))
如果存在NA值,可通过missing参数指定默认值:
df <- df %>% mutate(`Departure Delay charges` = if_else(departure_delay > 15, 75 * departure_delay, 0, missing = 0))
内容的提问来源于stack exchange,提问作者Nature Story
相关产品推荐
相关产品推荐

