Twitterの@EZGraphsは次のように書いています。
私も今日これをやろうとしていましたが、結局Zipファイルを手動でダウンロードすることになりました。
私は次のようなものを試しました:
fileName <- "http://www.newcl.org/data/zipfiles/a1.Zip"
con1 <- unz(fileName, filename="a1.dat", open = "r")
しかし、私は遠く離れているように感じます。何かご意見は?
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
)またはgzip圧縮(.gz
)またはbzip2ed(.bz2
)ファイルはファイルのみであり、接続から直接読み取ることができます。そのため、代わりにそれを使用するデータプロバイダーを取得します:)
記録のために、Dirkの答えをコードに翻訳してみました:-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)
http://cran.r-project.org/web/packages/downloader/index.html にあるCRANパッケージ「downloader」を使用しました。はるかに簡単です。
download(url, dest="dataset.Zip", mode="wb")
unzip ("dataset.Zip", exdir = "./")
Macの場合(およびLinuxの場合)...
Zipアーカイブに単一のファイルが含まれている場合、data.table
パッケージのfunzip
と組み合わせて、bashコマンドfread
を使用できます。
library(data.table)
dt <- fread("curl http://www.newcl.org/data/zipfiles/a1.Zip | funzip")
アーカイブに複数のファイルが含まれる場合、代わりにtar
を使用して、特定のファイルを標準出力に抽出できます。
dt <- fread("curl http://www.newcl.org/data/zipfiles/a1.Zip | tar -xf- --to-stdout *a1.dat")
read.table
関数で読み込むことができないファイルに対して機能する例を次に示します。この例では、.xlsファイルを読み取ります。
url <-"https://www1.toronto.ca/City_Of_Toronto/Information_Technology/Open_Data/Data_Sets/Assets/Files/fire_stns.Zip"
temp <- tempfile()
temp2 <- tempfile()
download.file(url, temp)
unzip(zipfile = temp, exdir = temp2)
data <- read_xls(file.path(temp2, "fire station x_y.xls"))
unlink(c(temp, temp2))
このコードを試してください。わたしにはできる:
unzip(zipfile="<directory and filename>",
exdir="<directory where the content will be extracted>")
例:
unzip(zipfile="./data/Data.Zip",exdir="./data")
Data.tableを使用してこれを行うには、次のように動作することがわかりました。残念ながら、リンクはもう機能しないため、別のデータセットにリンクを使用しました。
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
に渡すことができるので、これは1行で可能ですが、.Zipファイルをダウンロードし、そこから単一のファイルを抽出してfread
に渡す方法がわかりません。 。