base :: max()与dplyr :: case_when之间的交互

时间:2019-04-07 05:33:33

标签: r dplyr

问题

我正在尝试编写一个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)

1 个答案:

答案 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返回一个向量。