日安,
假设我有一个数据集,它显示了风力和燃气发生器的能力和输出,它看起来类似于下面的示例表:
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“和燃气发电机的”容量“)和实际产生的量(即”输出“)之间的差异。
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“函数!
提前谢谢你!
发布于 2022-06-10 20:56:47
我们可以这样做:
正如@langtang+1已经提到的,我们可以使用ifelse语句来完成它。在这里,我们将它直接放在case_when语句中,我认为它更有趣一些:
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),
)) 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发布于 2022-06-10 20:36:27
一种简单的方法是在Difference调用之后,在同一个mutate()中更新case_when()列
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)
)输出:
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 2https://stackoverflow.com/questions/72579542
复制相似问题