Использование R для загрузки заархивированного файла данных, извлечения и импорта данных



@EZGraphs в Twitter пишет:
"Много онлайн они являются молнии. Есть ли способ загрузить, распаковать архив и загрузить данные в данные.кадр с использованием R? #Rstats"



Я также пытался сделать это сегодня, но в итоге просто скачав zip-файл вручную.



Я пробовал что-то вроде:



fileName <- "http://www.newcl.org/data/zipfiles/a1.zip"
con1 <- unz(fileName, filename="a1.dat", open = "r")


но я чувствую, как будто я далеко.
Есть мысли?

644   7  

7 ответов:

Zip архивы на самом деле больше "файловая система" с метаданными контента и т. д. Смотрите help(unzip) для сведения. Так что делать то, что вы набросать выше вам нужно

  1. создать временную. имя файла (например,tempfile())
  2. использовать download.file() для извлечения файла в temp. файл
  3. использовать unz() для извлечения целевого файла из temp. файл
  4. удалите временный файл через unlink()

который в коде (спасибо за базовый пример, но это проще) выглядит как

temp <- tempfile()
download.file("http://www.newcl.org/data/zipfiles/a1.zip",temp)
data <- read.table(unz(temp, "a1.dat"))
unlink(temp)

сжатый (.z) или gzipped (.gz) или bzip2ed (.bz2) файлы просто файлом и те, которые вы можете прочитать непосредственно с пересадкой. Так что получить поставщик данных, чтобы использовать это вместо :)

просто для протокола, я попытался перевести ответ Дирка в код : - P

temp <- tempfile()
download.file("http://www.newcl.org/data/zipfiles/a1.zip",temp)
con <- unz(temp, "a1.dat")
data <- matrix(scan(con),ncol=4,byrow=TRUE)
unlink(temp)

я использовал CRAN пакет "загрузчик" найден в http://cran.r-project.org/web/packages/downloader/index.html . Гораздо проще.

download(url, dest="dataset.zip", mode="wb") 
unzip ("dataset.zip", exdir = "./")

для Mac (и я предполагаю, Linux)...

если zip архив содержит один файл, вы можете использовать команду bash funzip, совместно с fread С data.table пакет:

library(data.table)
dt <- fread("curl http://www.newcl.org/data/zipfiles/a1.zip | funzip")

в случаях, когда архив содержит несколько файлов, вы можете использовать tar вместо того, чтобы извлечь конкретный файл в stdout:

dt <- fread("curl http://www.newcl.org/data/zipfiles/a1.zip | tar -xf- --to-stdout *a1.dat")

попробуйте этот код. Это работает для меня:

unzip(zipfile="<directory and filename>",
      exdir="<directory where the content will be extracted>")

пример:

unzip(zipfile="./data/Data.zip",exdir="./data")

для этого используются данные.стол, я обнаружил, что следующие работы. К сожалению, ссылка больше не работает, поэтому я использовал ссылку для другого набора данных.

library(data.table)
temp <- tempfile()
download.file("https://www.bls.gov/tus/special.requests/atusact_0315.zip", temp)
timeUse <- fread(unzip(temp, files = "atusact_0315.dat"))
rm(temp)

Я знаю, что это возможно в одной строке, так как вы можете передать скрипты bash в fread, но я не уверен, как загрузить a .zip-файл, извлечь и передать один файл из этого в fread.

вот пример, который работает для файлов, которые невозможно прочесть с

Comments

    Ничего не найдено.