2013-07-27 27 views
5

Có thể đọc tệp Excel từ tệp ZIP trực tuyến không?R có thể đọc tệp XLS đã nén từ URL không?

Tôi đã cố gắng một cái gì đó giống như tôi sẽ làm gì với read.csv:

nuts = url("http://ec.europa.eu/eurostat/ramon/documents/nuts/NUTS_2010.zip") 
xlsx::read.xlsx(unz(nuts, "NUTS_2010.xls"), 1) 
close(nuts) 

... vô ích.

+0

Bạn nên báo cáo lỗi/đầu ra bạn đang nhận được. – Thomas

+0

Có, xin lỗi: 'read.xlsx' trả về" đường dẫn không xác định "(nó không hiểu kết nối' unz() '). –

Trả lời

3

Đó là một chút ít thuận lợi, nhưng làm thế nào về:

basefn <- "NUTS_2010" 
urlPath <- "http://ec.europa.eu/eurostat/ramon/documents/nuts/" 
xlsFile <- paste0(basefn,".xls") 
zipFile <- paste0(basefn,".zip") 
download.file(paste0(urlPath,zipFile),zipFile) 
unzip(zipFile) 
## I had trouble with xlsx::read.xlsx, but gdata::read.xls was OK 
## xlsx::read.xlsx(xlsFile,1) 
gdata::read.xls(xlsFile) 
unlink(zipFile) 

Bạn luôn có thể gói này thành một chức năng readZipURL <- function(urlPath,basefn) {...} nếu bạn muốn làm điều đó một cách thường xuyên (bạn có thể muốn dọn dẹp XLS tải nộp quá ...)

+0

Cảm ơn, nhưng tôi đang cố gắng làm điều đó mà không cần tải xuống tệp ZIP. BẤT K way cách nào mã của bạn có thể hoạt động mà không sao chép ZIP vào đĩa? –

+0

Tôi nghĩ bạn thực sự phải xem xét kỹ cả những gì mà trình giải nén * và * XLS đang làm - cả hai đều phải có khả năng làm việc trong chế độ trực tuyến/làm việc từ đường ống. Tôi đoán bạn không muốn sao chép vào đĩa vì bạn sẽ có một tệp ZIP lớn ...? Bạn * có thể * có thể đặt một cái gì đó cùng với 'gdata :: xls2sep' (thường tạo ra một tập tin tạm thời) gửi đến một đường ống thay vào đó, mà' read.csv' có thể đọc từ ... quá khó cho tôi để đặt lại với nhau trong thời gian rảnh rỗi của tôi. –

+0

Tôi sẽ chấp nhận giải pháp của bạn - Tôi không biết liệu 'read.xlsx' có thực sự hoạt động theo cách này hay không và nó trở nên quá phức tạp để tránh tải xuống ZIP trong trường hợp này (thậm chí không lớn). –

2

này làm việc cho tôi

options(java.parameters = "-Xmx4g") 
library(XLConnect) 
temp <- tempfile() 
zipfile <- paste0("https://www.cms.gov/Research-Statistics-Data-and-Systems/Statistics-Trends-and-Reports/MCRAdvPartDEnrolData/Downloads/" 
        ,year,"/",year,"-", "Low-Income-Subsidy-Contract-Enrollment-by-County.zip") 
download.file(zipfile,temp) 

filename <- paste0("WEB Tables LIS by state -county ",month2,"-","1","-",year,".xlsx") 

temp1 <- unzip(temp) 
assign(paste0("scc_pdp_lis_",year),readWorksheetFromFile(temp1,sheet=1,startRow=7,header=F)) 

tôi đọc một số tác phẩm CMS tôi đã quan tâm trên

Các vấn đề liên quan