R语言dplyr使用case_when与mutate计算时将负值置零的方法
保留case_when结构实现燃气发电机差值负值置0
不需要调整原有case_when的分支框架,只需要修改燃气类型对应的计算表达式,对计算出的差值做负值截断即可,风力发电机的计算逻辑可以完全保留。
推荐实现代码
library(dplyr) Difference_Data <- Generation_Data %>% mutate(Difference = case_when( Fuel_Type == 'Wind' ~ Available_Capacity - Output, Fuel_Type == 'Gas' ~ pmax(Capability - Output, 0) ))
逻辑说明
- 这里用R原生的
pmax()函数做并行最大值计算:对每一条燃气发电机记录,先计算Capability - Output的差值,如果差值≥0就返回原计算结果,如果差值<0就直接返回0,刚好满足负值自动置0的需求。 - 如果更习惯用判断函数,也可以把燃气分支的表达式替换成
ifelse(Capability - Output < 0, 0, Capability - Output),效果完全一致,但pmax写法更简洁,执行效率也更高。
示例数据运行结果
用给出的示例数据集运行上述代码,得到的Difference列结果完全符合预期:
- 1号燃气发电机原计算差值为-0.5,处理后返回0
- 4号燃气发电机计算差值为2,保留原值
- 3台风力发电机的计算结果和原有逻辑完全一致,没有变动
内容的提问来源于stack exchange,提问作者Howie25247
相关产品推荐
相关产品推荐

