Skip to content

Instantly share code, notes, and snippets.

@Houstonwp
Created May 29, 2019 20:14
Show Gist options
  • Save Houstonwp/a7669450e5bce7dbbe8215583dbfe035 to your computer and use it in GitHub Desktop.
Save Houstonwp/a7669450e5bce7dbbe8215583dbfe035 to your computer and use it in GitHub Desktop.
Parse SOA Select Mortality Table
library(tidyverse)
library(xml2)
parse_select <- function(.path) {
possibly_read_xml <- purrr::possibly(read_xml, otherwise = NULL)
.xml <- possibly_read_xml(.path)
if (!is.null(.xml)) {
min_duration <-
.xml %>%
xml_find_all("//Table/MetaData/AxisDef[@id='Duration']/MinScaleValue") %>%
xml_integer()
max_duration <-
.xml %>%
xml_find_all("//Table/MetaData/AxisDef[@id='Duration']/MaxScaleValue") %>%
xml_integer()
durations <- max_duration - min_duration + 1
issue_age <-
.xml %>%
xml_find_all("//Table[1]/Values/Axis[@t]") %>%
xml_attr("t") %>%
as.numeric() %>%
rep(durations) %>%
sort()
duration <-
.xml %>%
xml_find_all("//Table[1]/Values/Axis/Axis/Y[@t]") %>%
xml_attr("t") %>%
as.numeric()
value <-
.xml %>%
xml_find_all("//Table[1]/Values/Axis/Axis/Y[@t]") %>%
xml_double()
tibble(issue_age, duration, value)
}
}
cso_table <-
urls %>%
map( ~ parse_select(.x)) %>%
purrr::compact() %>%
tibble(table = .)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment