我正在尝试编写一个dplyr::case_when
语句,该语句使用max
来计算应支付给各个收入水平的政府福利。一旦达到一定收入水平,应付给接收者的金额将减少固定金额。他们的收入不能少于$ 0(他们不能成为净付款人)。 因此计算中需要下限。
使用max
函数时,benefit
介于$ 53,728和$ 94,316之间时,income
变量(下)保持恒定在$ 237。我不明白为什么会这样。
如果删除了max
函数,我将得到正确的答案,但仅适用于部分范围。我仍然需要一种方法,在benefit
语句的dplyr::case_when
变量中引入$ 0的下限。
library(tidyverse)
tibble(
income = 53728:100000,
benefit = case_when(
income <= 53728 ~ 237.89,
between(income, 53728, 94316) ~ max(237.89 - ((income - 53725) * 0.20), 0),
TRUE ~ 0
)
)
#Quick plot of the variables
ggplot(df, aes(x = income, benefit)) +
geom_line() +
theme_light() +
scale_x_continuous(labels = scales::dollar)
答案 0 :(得分:1)
您需要使用pmax
而不是max.
> tibble( income = 53728:100000, benefit = case_when( income <= 53728 ~
> 237.89, between(income, 53728, 94316) ~ pmax(237.89 - ((income - 53725) * 0.20), 0), TRUE ~ 0 )
pmax
中的p表示平行。 max
仅返回一个数字,pmax
返回一个向量。