@EZGraphs na Twitterze pisze: „Wiele plików CSV online jest spakowanych. Czy istnieje sposób na pobranie, rozpakowanie archiwum i załadowanie danych do data.frame przy użyciu R? #Rstats”
Próbowałem to zrobić dzisiaj, ale skończyło się na ręcznym pobraniu pliku zip.
Próbowałem czegoś takiego:
fileName <- "http://www.newcl.org/data/zipfiles/a1.zip"
con1 <- unz(fileName, filename="a1.dat", open = "r")
ale czuję się jakbym był daleko. jakieś pomysły?
r
zip
connection
Jeromy Anglim
źródło
źródło
Odpowiedzi:
Archiwa zip są właściwie bardziej „systemem plików” z metadanymi zawartości itp. Zobacz
help(unzip)
szczegóły. Aby więc zrobić to, co nakreśliłeś powyżej, musisztempfile()
)download.file()
do pobierania pliku do temp. plikunz()
do wyodrębniania pliku docelowego z temp. plikunlink()
który w kodzie (dzięki za podstawowy przykład, ale to jest prostsze) wygląda jak
Skompresowane (
.z
) lub skompresowane (.gz
) lub bzip2ed (.bz2
) Pliki są tylko plik i może ci czytać bezpośrednio z połączenia. Więc poproś dostawcę danych, aby użył tego zamiast tego :)źródło
.z
archiwum? Mogę czytać z połączenia URL zreadBin(url(x, "rb"), 'raw', 99999999)
, ale jak wyodrębnić zawarte dane?uncompress
Została usunięta z CRAN pakiet - jest to możliwe w bazowej R (a jeśli tak, to jest ograniczony do systemów * nixowych?)? W razie potrzeby chętnie opublikuję jako nowe pytanie.help(gzfile)
- myślałem, że protokół gzip może teraz zdekompresować (stare) pliki .z teraz, gdy patent już dawno wygasł. Może nie. Kto w ogóle używa .z? Wezwano lata 80-te, chcą cofnąć kompresję ;-)readRDS()
(przynajmniej dla mnie). Z tego, co wiem, plik musi znajdować się w pliku, z którym można czytaćread.table()
.Tak dla porządku, spróbowałem przetłumaczyć odpowiedź Dirka na kod :-P
źródło
scan()
; możesz użyćread.table()
et al bezpośrednio na połączeniu. Zobacz moją zredagowaną odpowiedźUżyłem „downloadera” pakietu CRAN, który można znaleźć pod adresem http://cran.r-project.org/web/packages/downloader/index.html . Dużo łatwiej.
źródło
Na Maca (i zakładam, że Linux) ...
Jeśli archiwum zip zawiera pojedynczy plik, możesz użyć polecenia bash
funzip
w połączeniu zfread
zdata.table
pakietu:W przypadkach, gdy archiwum zawiera wiele plików, możesz
tar
zamiast tego wyodrębnić określony plik na standardowe wyjście:źródło
File is empty:
Oto przykład, który działa dla plików, których nie można wczytać za pomocą
read.table
funkcji. Ten przykład odczytuje plik .xls.źródło
Aby to zrobić za pomocą data.table, stwierdziłem, że działa to. Niestety link już nie działa, więc użyłem linku do innego zestawu danych.
Wiem, że jest to możliwe w jednej linii, ponieważ możesz przekazać skrypty bash do
fread
, ale nie jestem pewien, jak pobrać plik .zip, wyodrębnić i przekazać z niego pojedynczy plikfread
.źródło
Wypróbuj ten kod. Mi to pasuje:
Przykład:
źródło
Okazało się, że działa dla mnie następujące. Te kroki pochodzą z filmu BTD na YouTube, Zarządzanie plikami Zipfile w R :
źródło