gpt4 book ai didi

r - 直接从R中的网址读取压缩的csv

转载 作者:行者123 更新时间:2023-12-03 14:08:11 26 4
gpt4 key购买 nike

我正在寻找下载压缩的csv并将其作为R对象加载,而不先将其保存到磁盘。我可以对压缩文件执行此操作,但似乎无法使其与gzfilegzcon一起使用。

例:

grabRemote <- function(url) {
temp <- tempfile()
download.file(url, temp)
aap.file <- read.csv(gzfile(temp), as.is = TRUE)
unlink(temp)
return(aap.file)
}
grabRemote("http://dumps.wikimedia.org/other/articlefeedback/aa_combined-20110321.csv.gz")

那会下载一个包含 Wikipedia article feedback data的(小)gz压缩文件(虽然不重要,但这只是表明它不是巨大的或有害的)。

我拥有的代码可以正常工作,但是我觉得通过创建和销毁临时文件会丢失一些非常明显的东西。

最佳答案

我几乎可以肯定我曾经回答过这个问题。结果是R的 Connections API(file()url()pipe(),...)可以即时进行解压缩,我认为您无法对远程http对象进行解压缩。

因此,您已经描述了非常简单的两步操作:将download.file()tempfile()结果一起用作第二个参数,以获取压缩文件,然后从中读取文件。作为tempfile()对象,它将在R session 结束时自动清除,因此我建议的一个较小的修复方法是跳过unlink()(但是我喜欢显式清除,因此您最好也保留它)。

编辑:知道了:

con <- gzcon(url(paste("http://dumps.wikimedia.org/other/articlefeedback/",
"aa_combined-20110321.csv.gz", sep="")))
txt <- readLines(con)
dat <- read.csv(textConnection(txt))

dim(dat)
# [1] 1490 19

summary(dat[,1:3])
# aa_page_id page_namespace page_title
# Min. : 324 Min. :0 United_States : 79
# 1st Qu.: 88568 1st Qu.:0 2011_NBA_Playoffs : 52
# Median : 2445733 Median :0 IPad_2 : 43
# Mean : 8279600 Mean :0 IPod_Touch : 38
# 3rd Qu.:16179920 3rd Qu.:0 True_Grit_(2010_film): 38
# Max. :31230028 Max. :0 IPhone_4 : 26
# (Other) :1214

关键是 gzcon帮助提示它可以对现有流进行解压缩。然后,我们需要稍微绕开 readLines,然后通过 textConnection进行读取,因为 read.csv想要在数据中来回移动(我想验证列宽)。

关于r - 直接从R中的网址读取压缩的csv,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9548630/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com