Как читать файл .rar прямо с сайта в R

Я хотел загрузить файл, заархивированный в open-plaques-all-2017-06-19.rar, но не смог реализовать его в R. Пожалуйста, посмотрите на мой код ниже

temp <- tempfile()

download.file("https://github.com/tuyenhavan/Statistics/blob/master/open-plaques-all-2017-06-19.rar", temp)

df<- fread(unzip(temp, files = "open-plaques-all-2017-06-19.csv"))
head(df)

person Tuyen    schedule 08.10.2017    source источник


Ответы (2)


Для этих соответствующих менеджеров платформ/пакетов вам понадобятся:

  • deb: libarchive-dev (Debian, Ubuntu и т. д.)
  • rpm: libarchive-devel (Fedora, CentOS, RHEL)
  • csw: libarchive_dev (Солярис)
  • варить: libarchive (Mac OSX)

Для пользователей Windows будут автоматически загружены предварительно скомпилированные двоичные файлы.

Затем выполните:

devtools::install_github("jimhester/archive") 

Вот один рабочий процесс. Теперь, когда указанный вами URL-адрес неверен/действителен. Вам нужно использовать «сырой» URL-адрес, чтобы добраться до фактического файла.

library(archive)

tf1 <- tempfile(fileext = ".rar")
download.file("https://github.com/tuyenhavan/Statistics/blob/master/open-plaques-all-2017-06-19.rar?raw=true", tf1)

tf2 <- tempfile()
archive_extract(tf1, tf2)

list.files(tf2)
## [1] "open-plaques-all-2017-06-19.csv"

file.size(file.path(tf2, list.files(tf2)))
## [1] 26942816

xdf <- readr::read_csv(file.path(tf2, list.files(tf2)))
dplyr::glimpse(xdf)
## Observations: 38,436
## Variables: 27
## $ id                     <int> 29923, 42945, 42944, 42943, 42942, 42941, 42940, ...
## $ title                  <chr> "Jon Pertwee blue plaque", "Apsley Cherry-Garrard...
## $ inscription            <chr> "Jon Pertwee 1919-1996 Doctor Who 1970-1974", "Ap...
## $ latitude               <dbl> NA, NA, NA, NA, NA, NA, 54.14910, 45.76330, NA, 4...
## $ longitude              <dbl> NA, NA, NA, NA, NA, NA, -4.46938, 4.83157, NA, 4....
## $ country                <chr> "United Kingdom", "United Kingdom", "United Kingd...
## $ area                   <chr> "London", "Bedford", "Harlow", "Bozen", "Adro", "...
## $ address                <chr> "BBC Television Centre", "Lansdowne Road", "The W...
## $ erected                <int> NA, NA, NA, NA, NA, 2016, NA, NA, NA, NA, NA, NA,...
## $ main_photo             <chr> NA, "https://commons.wikimedia.org/wiki/Special:F...
## $ colour                 <chr> "blue", "blue", "blue", "brass", "brass", "brass"...
## $ organisations          <chr> "[]", "[]", "[\"Harlow Civic Society\"]", "[\"Gun...
## $ language               <chr> "English", "English", "English", "Italian", "Ital...
## $ series                 <chr> NA, NA, NA, "Stolpersteine Italiano", "Stolperste...
## $ series_ref             <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N...
## $ `geolocated?`          <chr> "false", "false", "false", "false", "false", "fal...
## $ `photographed?`        <chr> "false", "true", "false", "true", "true", "true",...
## $ number_of_subjects     <int> 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0...
## $ lead_subject_name      <chr> "Jon Pertwee", "Apsley Cherry-Garrard", NA, NA, "...
## $ lead_subject_born_in   <int> 1919, 1886, NA, NA, 1911, 1913, NA, 1888, 1832, 1...
## $ lead_subject_died_in   <int> 1996, 1959, NA, NA, 1945, 1945, NA, 1967, 1898, 1...
## $ lead_subject_type      <chr> "man", "man", NA, NA, "man", "man", NA, "man", "m...
## $ lead_subject_roles     <chr> "[\"Doctor Who\", \"actor\", \"entertainer\", \"t...
## $ lead_subject_wikipedia <chr> "https://en.wikipedia.org/wiki/Jon_Pertwee", "htt...
## $ lead_subject_dbpedia   <chr> "http://dbpedia.org/resource/Jon_Pertwee", "http:...
## $ lead_subject_image     <chr> "https://commons.wikimedia.org/wiki/Special:FileP...
## $ subjects               <chr> "[\"Jon Pertwee|(1919-1996)|man|Doctor Who, actor...

Рассмотрите вариант unlink()обработки tf1, копирования файлов из tf2 в более постоянное место, а затем unlink()обработки tf2 для очистки после завершения работы.

person hrbrmstr    schedule 08.10.2017

Я не знаю, существует ли библиотека R для извлечения RAR-архивов, но если у вас установлены unrar, unar, p7zip или что-то подобное, вы можете вызвать их через системный вызов и попросить их извлечь файл.
Кроме того, вам нужно пометить ?raw=true в конце URL-адреса, чтобы получить необработанные данные (а не html-код).

Это использование p7zip или unar на Mac, для других утилит и систем может потребоваться другой синтаксис.

temp <- tempfile()

download.file(paste0("https://github.com/tuyenhavan/Statistics/blob/master/", 
                    "open-plaques-all-2017-06-19.rar?raw=true"), temp)

#list all csv-files in current working directory
csv_files <- list.files(pattern="\\.csv")

#extract RAR to current working directory using p7zip
system(paste("7z x", temp, paste0("-o", getwd())))

#extract RAR to current working directory using unar
system(paste("unar", "-f", "-o", shQuote(getwd()), shQuote(temp)))

#find the name of the extracted csv file
csv_new <- setdiff(list.files(pattern="\\.csv"), csv_files)

#read in the csv as a data.frame
csv.dtf <- read.csv(csv_new)

Вы также можете читать в csv напрямую, но это довольно медленно.

csv <- system(paste("7z x -so", temp), intern=TRUE)
csv.dtf <- read.csv(text=csv)
person AkselA    schedule 08.10.2017