Соответствие строки для загрузки определенных файлов - PullRequest
1 голос
/ 24 сентября 2019

Я хочу загрузить ежеквартальные файлы "NDC-HCPCS-Crosswalk" за 2018 и 2019 годы и все последующие годы с веб-сайта cms.gov .

Просмотр названийфайлы, которые, как они кажутся, меняются незначительно для каждого квартала, но имеют одинаковую общую структуру:

year-mon / mon-year - * - NDC-HCPCS-Crosswalk.zip

Вот историческиеимена файлов, которые я хочу загрузить:

  • 2018- январь-ASP-NDC-HCPCS-Crosswalk.zip
  • 2018-April-ASP-NDC-HCPCS-Crosswalk.zip
  • 2018-July-NDC-HCPCS-Crosswalk.zip
  • 2018-Oct-NDC-HCPCS-Crosswalk.zip
  • Январь-2019-ASP-NDC-HCPCS-Crosswalk.zip
  • апрель-2019-ASP-NDC-HCPCS-Crosswalk.zip
  • 2019-July-ASP-NDC-HCPCS-Crosswalk.zip

I 'Мы выяснили, как загрузить некоторые из этих файлов по отдельности, разархивировать их и прочитать содержащиеся в них файлы XLS, но я надеялся на более изящный или масштабируемый способ сделать это в будущем.

В настоящее время мой код выглядит следующим образом:

#DEFINE THE MONTHS OF THE FILES WE WANT TO RETRIEVE
months <- c("January", "April", "July", "Oct")

#FIND THE URLS OF THE FILES WE NEED
urls <- sprintf("https://www.cms.gov/Medicare/Medicare-Fee-for-Service-Part-B-Drugs/McrPartBDrugAvgSalesPrice/Downloads/%s-2019-ASP-NDC-HCPCS-Crosswalk.zip", months)

#DOWNLOAD FILES IF THEY DO NOT EXIST (https://nicercode.github.io/guides/repeating-things/)
download.maybe <- function(urls, refetch=FALSE, path = ".") {
  dest <- file.path(path, basename(urls))
  if (refetch || !file.exists(dest))
    download.file(urls, dest)
  dest
}

path <- "data"
dir.create(path, showWarnings = FALSE)
files <- sapply(urls, download.maybe, path=path)

Вместо передачи месяцев в sprintf я могу передать подстановочный знак, например, если он содержит (2018 или 2019) AND (Jan *, Ap *, Jul *), Окт *) потом скачивать файлы?

1 Ответ

1 голос
/ 25 сентября 2019

Одним из подходов может быть очистка страницы, которую вы хотите.Мы можем получить все атрибуты href на странице, выбрать только те, которые заканчиваются на "zip", а затем использовать download.file для их загрузки.

url <- "https://www.cms.gov/Medicare/Medicare-Fee-for-Service-Part-B-Drugs/McrPartBDrugAvgSalesPrice/2018ASPFiles.html"
library(rvest)


all_urls <- url %>%
             read_html() %>%
             html_nodes("a") %>%
             html_attr("href") %>%
             grep("HCPCS-Crosswalk\\.zip$", ., value = TRUE)
             paste0("https://www.cms.gov", .)


lapply(all_urls, function(x) download.file(x, basename(x)))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...