Перечислите имена в строки - PullRequest
1 голос
/ 06 июня 2019

Проблема

Мне нужно свернуть список в фрейм данных / таблицу и преобразовать имена списков в значения в каждом наблюдении.

Данные

#This chunk generates the list
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))) })

Моя попытка

Этот код создает нужный мне фрейм данных, но не включает имя элемента списка в каждое нужное мне наблюдение.

map_df(pit_sch, `[`, c("Taxable income", "Tax on this income", "cumm_tax_amt", "tax_rate", "threshold"))

Успех выглядит как

выходные данные должны включать имя элемента списка, связанного с данными: "имя_таблицы" , "Налогооблагаемый доход", "Налог на этот доход", "cumm_tax_amt", "tax_rate", "threshold"

1 Ответ

1 голос
/ 06 июня 2019

Мы можем использовать bind_rows с .id для создания отдельного data.frame с 'table_name' в качестве нового столбца из names из list

library(tidyverse)
out <- bind_rows(pit_sch, .id = 'table_name')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...