Использование R для загрузки заархивированного файла данных, извлечения и импорта данных
@EZGraphs в Twitter пишет:
"Много онлайн они являются молнии. Есть ли способ загрузить, распаковать архив и загрузить данные в данные.кадр с использованием R? #Rstats"
Я также пытался сделать это сегодня, но в итоге просто скачав zip-файл вручную.
Я пробовал что-то вроде:
fileName <- "http://www.newcl.org/data/zipfiles/a1.zip"
con1 <- unz(fileName, filename="a1.dat", open = "r")
но я чувствую, как будто я далеко.
Есть мысли?
7 ответов:
Zip архивы на самом деле больше "файловая система" с метаданными контента и т. д. Смотрите
help(unzip)для сведения. Так что делать то, что вы набросать выше вам нужно
- создать временную. имя файла (например,
tempfile())- использовать
download.file()для извлечения файла в temp. файл- использовать
unz()для извлечения целевого файла из temp. файл- удалите временный файл через
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