第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

修剪巨大的(3.5 GB)CSV文件以讀入R

修剪巨大的(3.5 GB)CSV文件以讀入R

慕姐4208626 2019-11-05 15:56:24
因此,我有一個(gè)數(shù)據(jù)文件(以分號(hào)分隔),該文件包含很多詳細(xì)信息和不完整的行(導(dǎo)致Access和SQL阻塞)。它是40年的縣級(jí)數(shù)據(jù)集,細(xì)分為細(xì)分,子細(xì)分和子細(xì)分(共200個(gè)因子)。簡(jiǎn)而言之,它是巨大的,如果我嘗試簡(jiǎn)單地閱讀它,它將不適合內(nèi)存。所以我的問(wèn)題是,考慮到我想要所有縣,但是只有一年(并且只有最高級(jí)別的細(xì)分……最終導(dǎo)致約100,000行),什么是獲得該收入的最佳方法?此匯總到R?目前,我正在嘗試與Python無(wú)關(guān)的事情,通過(guò)一次讀取和操作一行來(lái)繞過(guò)文件大小限制,但是我更喜歡僅R的解決方案(CRAN包可以)。有沒(méi)有類似的方法可以一次在R中讀取文件?任何想法將不勝感激。更新:約束條件需要使用我的機(jī)器,所以沒(méi)有EC2實(shí)例盡可能僅R。在這種情況下,速度和資源不是問(wèn)題...只要我的機(jī)器不爆炸...如下所示,數(shù)據(jù)包含混合類型,稍后我需要對(duì)其進(jìn)行操作數(shù)據(jù)數(shù)據(jù)為3.5GB,約850萬(wàn)行和17列幾千行(?2k)格式錯(cuò)誤,只有一列而不是17這些完全不重要,可以刪除我只需要該文件中的約100,000行(見下文)數(shù)據(jù)示例:County; State; Year; Quarter; Segment; Sub-Segment; Sub-Sub-Segment; GDP; ...Ada County;NC;2009;4;FIRE;Financial;Banks;80.1; ...Ada County;NC;2010;1;FIRE;Financial;Banks;82.5; ...NC  [Malformed row][8.5 Mill rows]我想刪掉一些列并從40個(gè)可用年份(1980-2020年的2009-2010年)中選擇兩個(gè),以便使數(shù)據(jù)適合R:County; State; Year; Quarter; Segment; GDP; ...Ada County;NC;2009;4;FIRE;80.1; ...Ada County;NC;2010;1;FIRE;82.5; ...[~200,000 rows]結(jié)果:修正所有提出的建議后,我決定由JD和Marek提出的readLines效果最好。我給了Marek支票,因?yàn)樗峁┝艘粋€(gè)示例實(shí)現(xiàn)。我在這里為我的最終答案復(fù)制了Marek實(shí)現(xiàn)的稍作改編的版本,使用strsplit和cat僅保留我想要的列。還應(yīng)當(dāng)指出,這是MUCH比Python效率較低......在,巨蟒通過(guò)要吃掉5分鐘3.5GB文件,而R取約60 ...但如果你只為R,那么這是罰單。## Open a connection separately to hold the cursor positionfile.in <- file('bad_data.txt', 'rt')file.out <- file('chopped_data.txt', 'wt')line <- readLines(file.in, n=1)line.split <- strsplit(line, ';')# Stitching together only the columns we wantcat(line.split[[1]][1:5], line.split[[1]][8], sep = ';', file = file.out, fill = TRUE)## Use a loop to read in the rest of the linesline <- readLines(file.in, n=1)失敗的方法:sqldf如果數(shù)據(jù)格式正確,這絕對(duì)是我以后將使用的此類問(wèn)題。但是,如果不是,則SQLite會(huì)阻塞。MapReduce老實(shí)說(shuō),文檔使我對(duì)此感到有些恐懼,所以我沒(méi)有去嘗試它??雌饋?lái)它也要求該對(duì)象也要在內(nèi)存中,如果是這樣的話,這將使問(wèn)題無(wú)濟(jì)于事。大內(nèi)存這種方法干凈地鏈接到數(shù)據(jù),但一次只能處理一種類型。結(jié)果,我的所有字符向量在放入big.table時(shí)都掉了。但是,如果我需要為將來(lái)設(shè)計(jì)大型數(shù)據(jù)集,我將考慮僅使用數(shù)字只是為了使此選項(xiàng)有效。掃描掃描似乎具有與大內(nèi)存類似的類型問(wèn)題,但是具有readLines的所有機(jī)制。簡(jiǎn)而言之,這一次不符合要求。
查看完整描述

3 回答

?
白豬掌柜的

TA貢獻(xiàn)1893條經(jīng)驗(yàn) 獲得超10個(gè)贊

我的嘗試readLines。這部分代碼是根據(jù)csv選定的年份創(chuàng)建的。


file_in <- file("in.csv","r")

file_out <- file("out.csv","a")

x <- readLines(file_in, n=1)

writeLines(x, file_out) # copy headers


B <- 300000 # depends how large is one pack

while(length(x)) {

    ind <- grep("^[^;]*;[^;]*; 20(09|10)", x)

    if (length(ind)) writeLines(x[ind], file_out)

    x <- readLines(file_in, n=B)

}

close(file_in)

close(file_out)


查看完整回答
反對(duì) 回復(fù) 2019-11-05
?
慕運(yùn)維8079593

TA貢獻(xiàn)1876條經(jīng)驗(yàn) 獲得超5個(gè)贊

有沒(méi)有類似的方法可以一次在R中讀取文件?


是。的readChar()函數(shù)將在字符的塊讀取,而不假定它們是空終止。如果要一次讀取一行中的數(shù)據(jù),可以使用readLines()。如果讀取塊或行,請(qǐng)執(zhí)行操作,然后將數(shù)據(jù)寫出,可以避免出現(xiàn)內(nèi)存問(wèn)題。盡管如果您想在Amazon EC2上啟動(dòng)大內(nèi)存實(shí)例,則可以獲取高達(dá)64GB的RAM。那應(yīng)該保存您的文件,還有足夠的空間來(lái)處理數(shù)據(jù)。


如果需要更高的速度,那么Shane建議使用Map Reduce是一個(gè)很好的建議。但是,如果您打算在EC2上使用大內(nèi)存實(shí)例,則應(yīng)該查看多核軟件包以使用計(jì)算機(jī)上的所有內(nèi)核。


如果您發(fā)現(xiàn)自己想將大量帶分隔符的數(shù)據(jù)讀入R中,則至少應(yīng)研究sqldf程序包,該程序包可讓您從R中直接導(dǎo)入sqldf,然后對(duì)R中的數(shù)據(jù)進(jìn)行操作。我發(fā)現(xiàn)sqldf是其中之一如上一個(gè)問(wèn)題所述,將大量數(shù)據(jù)導(dǎo)入R的最快方法。


查看完整回答
反對(duì) 回復(fù) 2019-11-05
  • 3 回答
  • 0 關(guān)注
  • 753 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)