如何從URL中讀取txt或csv文件?

這篇文章主要討論如何從URL中獲取數(shù)據(jù)。為什么需要從URL中獲取數(shù)據(jù)?

  • 你想和不熟悉R的人分享你的代碼,以及你想避免解釋如何在文件開(kāi)頭改變文件的路徑等問(wèn)題。
  • URL中的數(shù)據(jù)一直更新,你想實(shí)時(shí)處理最新的數(shù)據(jù)。
  • 你希望你的代碼在另一臺(tái)機(jī)器以及另一個(gè)目錄下工作。
  • 你想在博客中發(fā)布一個(gè)完整的可重復(fù)的分析實(shí)驗(yàn),你不想在文中出現(xiàn)”請(qǐng)到www.xxxx.com,下載數(shù)據(jù)并加載到R中”。

不管你的原因是什么,都是很棒的想法。下面是一些從URL中獲取數(shù)據(jù)的一些代碼,希望能幫到一些人。

說(shuō)明?。?!

這里僅僅處理表格形式的數(shù)據(jù),并不是從網(wǎng)絡(luò)中爬取數(shù)據(jù)。這是最簡(jiǎn)單的一種情況:在URL中儲(chǔ)存著一個(gè)txt或csv文件,你希望直接讀取數(shù)據(jù),而不是先下載到本地,然后再讀進(jìn)R中。

使用data.table::fread()

我喜歡data.table包。幾乎每個(gè)項(xiàng)目中,我都會(huì)使用它。它是R中data.frame對(duì)象的擴(kuò)展,但是在性能上有很大的提升。其中一個(gè)改進(jìn)點(diǎn)就是fread()函數(shù)。它類似于base包中的read.csv()和read.table()函數(shù)。fread()在很多地方做了改善,但是這里我們僅僅使用它來(lái)讀取URL中的數(shù)據(jù)。使用fread()在本地讀取數(shù)據(jù)的格式如下:

library(data.table)
mydat <- fread('C://Some/File/Path.csv')

從網(wǎng)絡(luò)源中讀取數(shù)據(jù)和這沒(méi)有什么區(qū)別。在help文件(?fread)中作者提供的樣例為:

library(data.table)
mydat <- fread('http://www.stats.ox.ac.uk/pub/datasets/csb/ch11b.dat')
head(mydat)
   V1  V2   V3    V4 V5
1:  1 307  930 36.58  0
2:  2 307  940 36.73  0
3:  3 307  950 36.93  0
4:  4 307 1000 37.15  0
5:  5 307 1010 37.23  0
6:  6 307 1020 37.24  0

如果你在瀏覽器中訪問(wèn)上面的鏈接,會(huì)彈出下載的窗口。如果你訪問(wèn)上級(jí)地址http://www.stats.ox.ac.uk/pub/datasets/csb,你會(huì)發(fā)現(xiàn)很多的數(shù)據(jù)下載鏈接。通過(guò)fread()我們可以直接讀取數(shù)據(jù)到R中,而不用點(diǎn)擊下載鏈接進(jìn)行下載。

使用RStudio

在RStudio中,通過(guò)點(diǎn)擊Tools -> Import Dataset -> From Web URL,然后填寫URL地址。

使用RCurl::getURL()

library(RCurl)
myfile <- getURL('https://sakai.unc.edu/access/content/group/3d1eb92e-7848-4f55-90c3-7c72a54e7e43/public/data/bycatch.csv', ssl.verifyhost=FALSE, ssl.verifypeer=FALSE)

getURL()抓取指定URL中的內(nèi)容,并不返回data.frame對(duì)象。它僅僅把URL中的內(nèi)容儲(chǔ)存到字符串中。

class(myfile)
[1] "character"

所以,我們?cè)趺传@取data.frame對(duì)象呢?我們可以使用textConnection()函數(shù)打開(kāi)字符串中的鏈接,就像打開(kāi)本地硬盤中的文件一樣。接著使用read.csv()函數(shù)(你也可以使用read.table()或fread()函數(shù))讀取字符串對(duì)象并創(chuàng)建data.frame對(duì)象。

mydat <- read.csv(textConnection(myfile), header=T)
head(mydat)
  Season  Area Gear.Type  Time Tows Bycatch
1 1989-90 North    Bottom   Day   48       0
2 1989-90 North    Bottom Night    6       0
3 1989-90 North Mid-Water Night    1       0
4 1989-90 South    Bottom   Day  139       0
5 1989-90 South Mid-Water   Day    6       0
6 1989-90 South    Bottom Night    6       0

現(xiàn)在,URL中的數(shù)據(jù)已成功轉(zhuǎn)換為R中data.frame對(duì)象。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容