проблема
Я пытаюсь рассчитать подоходный налог, подлежащий уплате с доходов от 1 до 200 000 долларов США, с шагом 100 долларов США (значения 2000 года).
Я собрал информацию о ставках налога, в результате чего появился список из 34 фреймов данных.
У меня есть функция, которая рассчитывает налог, подлежащий уплате на основе дохода и применимых ставок.
Используя эту функцию, я хочу получить вектор, показывающий подлежащий уплате налог:
- для каждого уровня дохода (значения 2000)
- для каждого набора (34 набора ставок)
Было бы здорово, если бы я мог вернуть этот вывод во фрейме данных / таблице.
Данные
#This scrapes the website of the tax administrator and returns a list of tidy data frames showing tax rates for income years between 2016 and 1983
url <- "https://www.ato.gov.au/Rates/Individual-income-tax-for-prior-years/"
pit_sch <- url %>%
read_html() %>%
html_table() %>%
setNames(., url %>%
read_html() %>%
html_nodes("caption") %>%
html_text()) %>%
map(.%>%
mutate(`Tax on this income` = gsub(",", "", `Tax on this income`),
cumm_tax_amt = str_extract(`Tax on this income`, "(?<=^\\$)\\d+") %>% as.numeric(),
tax_rate = str_extract(`Tax on this income`, "\\d+.(\\d+)?(?=(\\s+)?c)") %>% as.numeric(),
threshold = str_extract(`Tax on this income`, "(?<=\\$)\\d+$") %>% as.numeric()
)
) %>%
map(~drop_na(.x, threshold)) %>%
map(function(x) { mutate_each(x, funs(replace(., is.na(.), 0))) })
#Defining income
income <- seq(from = 1, to = 200000, by = 100)
#The function for calculating tax payable
tax_calc <- function(data, income) {
i <-tail(which(income >= data[, 5]), 1)
if (length(i) > 0)
return(((income - data[i,5]) * (data[i,4]/100)) + data[i,3])
else
return(0)
}
Моя попытка
> map2(pit_sch, income, tax_calc)
Error: Mapped vectors must have consistent lengths:
* `.x` has length 34
* `.y` has length 2000
enter code here