首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Case_when变异函数使负值为零

Case_when变异函数使负值为零
EN

Stack Overflow用户
提问于 2022-06-10 20:29:55
回答 2查看 94关注 0票数 1

日安,

假设我有一个数据集,它显示了风力和燃气发生器的能力和输出,它看起来类似于下面的示例表:

代码语言:javascript
复制
Generation_Data = data.frame(Generator= c(1, 2, 3, 4, 5),
                     Fuel_Type = c('Gas', 'Wind', 'Wind', 'Gas', 'Wind'),
                     Available_Capacity = c(0, 11, 9, 0, 12 ),
                     Capability = c(50, 19, 18, 56, 20),
                     Output = c(50.5, 10, 7, 54, 10))

请注意,风力发电机的“可用容量”和燃气发电机的“能力”本质上是相同的,它们代表了发电机所能产生的理论最大功率。

我使用下面的突变函数来计算每个发电机的理论发电能力(即风力发电机的"Available_Capacity“和燃气发电机的”容量“)和实际产生的量(即”输出“)之间的差异。

代码语言:javascript
复制
library(dplyr)

Difference_Data <- Generation_Data %>% 
  mutate(Difference = case_when(
    Fuel_Type == 'Wind' ~ (Available_Capacity - Output),
    Fuel_Type == 'Gas' ~ (Capability - Output)
))

但我有一些罕见的例子(在本例中为Generator-1),其中气体发生器的产量略高于它们的理论“能力”,这导致“差异”为负值。因此,我想添加一些代码,当气体发生器小于0时,它会产生“差异”。

所以在前面的例子中,生成器1的差值是-0.5,但是我想让这个值等于0。有人知道怎么做吗?此外,请注意,我必须这样做,而不删除这个"case_when“函数!

提前谢谢你!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-06-10 20:56:47

我们可以这样做:

正如@langtang+1已经提到的,我们可以使用ifelse语句来完成它。在这里,我们将它直接放在case_when语句中,我认为它更有趣一些:

代码语言:javascript
复制
library(dplyr)

Difference_Data <- Generation_Data %>% 
  mutate(Difference = case_when(
    Fuel_Type == 'Wind' ~ (Available_Capacity - Output) ,
    Fuel_Type == 'Gas' ~ ifelse((Capability - Output) > 0, 
                                (Capability - Output), 0),
  ))
代码语言:javascript
复制
  Generator Fuel_Type Available_Capacity Capability Output Difference
1         1       Gas                  0         50   50.5          0
2         2      Wind                 11         19   10.0          1
3         3      Wind                  9         18    7.0          2
4         4       Gas                  0         56   54.0          2
5         5      Wind                 12         20   10.0          2
票数 2
EN

Stack Overflow用户

发布于 2022-06-10 20:36:27

一种简单的方法是在Difference调用之后,在同一个mutate()中更新case_when()

代码语言:javascript
复制
Difference_Data <- Generation_Data %>% 
  mutate(Difference = case_when(
    Fuel_Type == 'Wind' ~ (Available_Capacity - Output),
    Fuel_Type == 'Gas' ~ (Capability - Output)
  ),
  Difference=if_else(Difference<0,0,Difference)
  )

输出:

代码语言:javascript
复制
  Generator Fuel_Type Available_Capacity Capability Output Difference
1         1       Gas                  0         50   50.5          0
2         2      Wind                 11         19   10.0          1
3         3      Wind                  9         18    7.0          2
4         4       Gas                  0         56   54.0          2
5         5      Wind                 12         20   10.0          2
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72579542

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档