Взаимодействие между base :: max () и dplyr :: case_when - PullRequest
1 голос
/ 07 апреля 2019

Проблема

Я пытаюсь написать заявление dplyr::case_when, в котором используется max для выработки государственной выплаты, выплачиваемой при различных уровнях дохода.Сумма, подлежащая уплате получателям, уменьшается на фиксированную сумму после прохождения определенного уровня дохода.Они не могут получить менее $ 0 (они не могут стать чистыми плательщиками). Так что в расчете необходим пол .

При использовании функции max переменная benefit (ниже) поддерживается постоянной на уровне 237 долл. США, когда income находится между 53 728 и 94 316 долл. США.Я не понимаю, почему это происходит.

Если функция max удалена, я получаю правильный ответ, но только для части диапазона.Мне все еще нужен способ ввести минимальное значение $ 0 для переменной benefit в операторе dplyr::case_when.

Моя попытка

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 Ответ

1 голос
/ 07 апреля 2019

вам нужно использовать 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 )

p в pmax означает параллель.В то время как max возвращает только одно число, pmax возвращает вектор.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...