讓我們想象一個包含 3 個檔案“a01”、“a02”和“a03”的 zip“a0”。使用 R,如何匯入我們不知道它在哪個檔案中的給定 csv(例如“ax.csv”)?
注意:假設這個給定的 csv 在整個 zip 中是唯一的,但可能還有其他命名不同的 csv。
感謝幫助
uj5u.com熱心網友回復:
使用unzip. 第一行獲取 zip 檔案中檔案的名稱。然后我們grep出我們想要的檔案。將模式更改為您要查找的任何內容。最后,第二個 unzip 呼叫提取了 csv 檔案并將其讀入。沒有使用任何包。
nms <- unzip("test.zip", list = TRUE)$Name
csv_name <- grep("csv$", nms, value = TRUE)
if (length(csv_name) != 1) stop("cannot determine which file to extract")
unzip("test.zip", files = csv_name)
read.csv(csv_name)
uj5u.com熱心網友回復:
如果您能夠使用 bash,則可以unzip在 Rgrep和檔案awk路徑之外,最后在 R 中read.csv。可能會快很多。
x <- system("unzip -c baz.zip | grep 'foo.csv' | awk '{print $2}'", int=TRUE)
read.csv(unzip('baz.zip', x))
# X mpg cyl disp
# 1 Mazda RX4 21.0 6 160
# 2 Mazda RX4 Wag 21.0 6 160
# 3 Datsun 710 22.8 4 108
資料
system('mkdir dir1 dir2')
write.csv(mtcars[1:3, 1:3], './dir2/foo.csv')
write.csv(NULL, './dir1/bar.csv')
system('zip -r baz.zip dir1 dir2')
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/478329.html
