使用R下载压缩数据文件,解压并导入.csv

19
我正在尝试使用R从网页下载并提取一个.csv文件。这个问题是“使用R下载压缩的数据文件,提取和导入数据”的重复。但我无法使解决方案起作用,可能是因为我使用的网址不对。我正在尝试从http://data.worldbank.org/country/united-kingdom(在“下载数据”下拉菜单下)下载.csv文件。使用上面链接中@Dirk的解决方案,我尝试了:
temp <- tempfile()
download.file("http://api.worldbank.org/v2/en/country/gbr?downloadformat=csv",temp)
con <- unz(temp, "gbr_Country_en_csv_v2.csv")
dat <- read.table(con, header=T, skip=2)
unlink(temp)

我通过查看页面源代码获取了扩展链接,我认为这可能是导致问题的原因,但如果我将其粘贴到地址栏中,它仍然可以正常工作。
该文件下载大小正确。
download.file("http://api.worldbank.org/v2/en/country/gbr?downloadformat=csv",temp)
# trying URL 'http://api.worldbank.org/v2/en/country/gbr?downloadformat=csv'
# Content type 'application/zip' length 332358 bytes (324 Kb)
# opened URL
# downloaded 324 Kb

# also tried unzip but get this warning
con <- unzip(temp, "gbr_Country_en_csv_v2.csv")
# Warning message:
# In unzip(temp, "gbr_Country_en_csv_v2.csv") :
# requested file not found in the zip file

但这些是我手动下载时的文件名。

我需要一些帮助,告诉我出了哪些问题,谢谢。

我正在使用Windows 8操作系统,R版本为3.1.0。

3个回答

23
为了让你的数据下载并解压缩,需要设置 mode="wb"
download.file("...",temp, mode="wb")
unzip(temp, "gbr_Country_en_csv_v2.csv")
dd <- read.table("gbr_Country_en_csv_v2.csv", sep=",",skip=2, header=T)

看起来默认值是"w",它假设文件是文本文件。如果这是一个普通的csv文件,那么这样做就可以了。但是由于它被压缩了,所以它是一个二进制文件,因此需要使用"wb"。没有"wb"部分,你根本无法打开zip文件。


谢谢,已经搞定了。还有感谢你的解释。 - user2957945
我已经为同样的问题苦苦挣扎了几个小时,感谢你的答案和清晰明了的解释...对我很有帮助。 - Pavithra Gunasekara

6

几乎一切都很好。在这种情况下,您只需要指定它是逗号分隔的文件,例如在read.table中使用sep=","

temp <- tempfile()
download.file("http://api.worldbank.org/v2/en/country/gbr?downloadformat=csv", 
              temp)
con <- unz(temp, "gbr_Country_en_csv_v2.csv")
dat <- read.table(con, header=T, skip=2, sep=",")
unlink(temp)

通过这个小改变,我可以顺利地导入你的CSV文件。
希望对你有所帮助,Luca。

1
谢谢Luca,我确实需要分隔符。然而,在unzunzip阶段出现了错误。在read.table阶段仍然无法找到文件。这些代码对你有用吗? - user2957945
@MrFlick Debian Gnu/Linux - Luca Braglia
@LucaBraglia好的。我认为Windows有一个不同的默认设置,或者文件在操作系统边界上越界,导致Windows尝试转换行结尾时出现问题。 - MrFlick

5
世界银行发展指标可以使用WDI软件包获取。例如:

WDI package

请注意,本文中的HTML标签已保留。
library(WDI)
inds <- WDIsearch(field = "indicator")[, 1]
GB <- WDI("GB", indicator = inds)

请查看WDIsearch和WDI函数以及参考手册获取更多关于IT技术的信息。详细内容请参考WDIsearchWDI参考手册

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接