@EZGraphs в Twitter пишет: «Многие онлайн-файлы CSV заархивированы. Есть ли способ загрузить, распаковать архив и загрузить данные в data.frame с помощью R? #Rstats»
Я тоже пытался сделать это сегодня, но в итоге просто загрузил zip-файл вручную.
Я пробовал что-то вроде:
fileName <- "http://www.newcl.org/data/zipfiles/a1.zip"
con1 <- unz(fileName, filename="a1.dat", open = "r")
но мне кажется, что я очень далеко. Есть предположения?
r
zip
connection
Джероми Энглим
источник
источник
Ответы:
Zip-архивы на самом деле больше представляют собой «файловую систему» с метаданными содержимого и т. Д. Подробнее
help(unzip)
см. Итак, чтобы сделать то, что вы нарисовали выше, вам нужноtempfile()
)download.file()
чтобы загрузить файл в темп. файлunz()
для извлечения целевого файла из temp. файлunlink()
который в коде (спасибо за базовый пример, но это проще) выглядит как
Сжатые (
.z
) или gzipped (.gz
) или bzip2ed (.bz2
) файлы - это просто файлы, которые вы можете читать непосредственно из соединения. Поэтому попросите поставщика данных использовать это вместо этого :)источник
.z
архива? Я могу читать с URL-адресаreadBin(url(x, "rb"), 'raw', 99999999)
, но как мне извлечь содержащиеся данные?uncompress
Пакет был удален из CRAN - это возможно в базовом R (и если да, то она ограничена * NIX системы?)? Если возможно, я буду рад разместить новый вопрос.help(gzfile)
- я думал, что протокол gzip теперь может распаковывать (каменные) файлы .z теперь, когда срок действия патента истек. Может и нет. Кто вообще использует .z?readRDS()
(по крайней мере, для меня). Насколько я могу судить, файл должен быть в виде файла, с которым вы можете читатьread.table()
.Для записи я попытался перевести ответ Дирка в код :-P
источник
scan()
; вы можете использоватьread.table()
et al непосредственно в соединении. См. Мой отредактированный ответ,Я использовал загрузчик пакета CRAN, который можно найти по адресу http://cran.r-project.org/web/packages/downloader/index.html . Намного легче.
источник
Для Mac (и я предполагаю, что Linux) ...
Если zip-архив содержит один файл, вы можете использовать команду bash
funzip
в сочетании сfread
from thedata.table
package:В случаях, когда архив содержит несколько файлов, вы можете использовать
tar
вместо этого для извлечения определенного файла в стандартный вывод:источник
File is empty:
Вот пример, который работает для файлов, которые не могут быть прочитаны с помощью
read.table
функции. В этом примере читается файл .xls.источник
Чтобы сделать это с помощью data.table, я обнаружил, что работает следующее. К сожалению, ссылка больше не работает, поэтому я использовал ссылку для другого набора данных.
Я знаю, что это возможно в одной строке, поскольку вы можете передавать сценарии bash
fread
, но я не уверен, как загрузить файл .zip, извлечь и передать из него один файлfread
.источник
Попробуйте этот код. Меня устраивает:
Пример:
источник
Я обнаружил, что у меня сработало следующее. Эти шаги взяты из видео BTD на YouTube, Управление Zip-файлами в R :
источник