
R讀寫(xiě)Excel文件中數(shù)據(jù)的方法
用R語(yǔ)言讀寫(xiě)Excel的方法有很多,但每種方法都有讓人頭疼的地方,如xlsx包的代碼復(fù)雜,只支持Excel2007;RODBC不易理解,限制太多,程序不穩(wěn)定,會(huì)出各種怪毛病。另存為csv格式的方法倒是比較通用比較穩(wěn)定,但又存在操作麻煩,無(wú)法程序化處理多個(gè)文件的問(wèn)題。提取xml也是個(gè)辦法,但步驟太多代碼太復(fù)雜,令人望而生畏。用剪貼板轉(zhuǎn)換也不好,這同樣需要人工參與,還不如存為csv。
相比之下,用gdata包來(lái)讀取,配合WriteXLS寫(xiě)入Excel則可以很好的避開(kāi)上述麻煩。這兩個(gè)包都支持Excel2003和Excel2007,運(yùn)行穩(wěn)定,代碼簡(jiǎn)單直觀,也不需要人工參與。下面用一個(gè)例子來(lái)說(shuō)明這兩個(gè)函數(shù)包讀寫(xiě)Excel的方法。
目標(biāo):
ordersData目錄下有多個(gè)結(jié)構(gòu)相同的Excel文件,有些是Excel2007格式,有些是Excel2003格式,這些文件存儲(chǔ)著歷年來(lái)的銷(xiāo)售訂單。請(qǐng)讀取這些文件,并統(tǒng)計(jì)出每個(gè)客戶(hù)的總銷(xiāo)售額,最后將結(jié)果寫(xiě)入result.xlsx。下面是2011.xlsx的部分?jǐn)?shù)據(jù):
代碼:
library(gdata)
library(WriteXLS)
setwd("E: /ordersData")
fileList<-dir()
orders<-read.xls(fileList[1])
for (file in fileList[2:length(fileList)]){
orders<-rbind(orders,read.xls(file))
}
result<-aggregate(orders[,4], orders[c(2)],sum)
WriteXLS("result","result.xlsx")
result.xlsx中的部分?jǐn)?shù)據(jù)如下:
代碼解讀
1、library(gdata)和library(WriteXLS)這兩句代碼用來(lái)引入第三方函數(shù)包,這兩個(gè)包具有read.xls和WriteXLS函數(shù),可以分別執(zhí)行讀取和寫(xiě)入Excel的動(dòng)作。
2、fileList<-dir()這句代碼列出了目錄內(nèi)的所有文件,之后的for語(yǔ)句則是循環(huán)讀取文件,并將數(shù)據(jù)拼合到數(shù)據(jù)框orders中。如果目錄內(nèi)有其他文件,則應(yīng)當(dāng)用通配符來(lái)過(guò)濾。
3、result<-aggregate(orders[,4], orders[c(2)],sum),這句代碼用來(lái)執(zhí)行分組匯總,其中orders[,4]代表匯總列(即Amount),orders[c(2)]代表分組列(即Client)。
4、read.xls和WriteXLS雖然來(lái)自于不同的包,但都支持data.frame數(shù)據(jù)類(lèi)型,因此可以很好的配合起來(lái)。另外,read.xls函數(shù)可以自動(dòng)識(shí)別Excel2003和Excel2007格式,使用起來(lái)非常方便。
5整段代碼都很簡(jiǎn)潔,初學(xué)者可以輕松掌握。
注意事項(xiàng):
1.版本
gdata和WriteXLS不是R語(yǔ)言自帶的庫(kù)函數(shù),而是第三方包,因此需要額外下載安裝。另外,這兩個(gè)函數(shù)包都會(huì)用到Perl環(huán)境,因此挑選合適版本的Perl尤為重要。經(jīng)過(guò)嘗試,當(dāng)R語(yǔ)言的版本是2.15.0時(shí),gdata最匹配的版本是2.13.3,WriteXLS的版本號(hào)則是3.5.0,但用最新的Perl環(huán)境與之配合時(shí)會(huì)出問(wèn)題,需要使用舊一點(diǎn)的5.14.2版本才行,否則會(huì)報(bào)以下錯(cuò)誤:
Error in xls2sep(xls, sheet, verbose = verbose, ..., method = method, :
Intermediate file 'C:\Users\Thim\AppData\Local\Temp\RtmpMHvLZS\file224060624738.csv' missing!
2.性能
讀寫(xiě)小文件沒(méi)問(wèn)題,但讀寫(xiě)稍大些的文件時(shí)會(huì)發(fā)現(xiàn)gdata和WriteXLS的性能極差(這也許是Perl的原因),比如讀一個(gè)8列20萬(wàn)行的Excel就需要8到10分鐘。如果特別關(guān)注性能,可以使用xlsx函數(shù)包。當(dāng)然,這樣一來(lái)就無(wú)法支持Excel2003了。事實(shí)上,xlsx的性能并不比gdata強(qiáng)太多,真正要解決性能問(wèn)題,還是應(yīng)當(dāng)將所有的Excel文件都轉(zhuǎn)為2007格式,并解壓出里面的xml文件,通過(guò)解析xml文件來(lái)讀取數(shù)據(jù)。
替代方案
對(duì)于R語(yǔ)言中存在的版本沖突和性能問(wèn)題,我們也可以使用Python、集算器、Perl等語(yǔ)言來(lái)解決。和R語(yǔ)言一樣,它們都可以讀寫(xiě)Excel文件并進(jìn)行數(shù)據(jù)計(jì)算。下面簡(jiǎn)單介紹集算器和Python的解決方案。
集算器已將訪(fǎng)問(wèn)EXCEL的功能打入安裝包,無(wú)需單獨(dú)下載第三方包,支持讀寫(xiě)Excel2003和Excel2007,對(duì)更老的版本以及Excel2010也支持。代碼如下:
這個(gè)方案要比R語(yǔ)言難用多了。
數(shù)據(jù)分析咨詢(xún)請(qǐng)掃描二維碼
若不方便掃碼,搜微信號(hào):CDAshujufenxi
LSTM 模型輸入長(zhǎng)度選擇技巧:提升序列建模效能的關(guān)鍵? 在循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)家族中,長(zhǎng)短期記憶網(wǎng)絡(luò)(LSTM)憑借其解決長(zhǎng)序列 ...
2025-07-11CDA 數(shù)據(jù)分析師報(bào)考條件詳解與準(zhǔn)備指南? ? 在數(shù)據(jù)驅(qū)動(dòng)決策的時(shí)代浪潮下,CDA 數(shù)據(jù)分析師認(rèn)證愈發(fā)受到矚目,成為眾多有志投身數(shù) ...
2025-07-11數(shù)據(jù)透視表中兩列相乘合計(jì)的實(shí)用指南? 在數(shù)據(jù)分析的日常工作中,數(shù)據(jù)透視表憑借其強(qiáng)大的數(shù)據(jù)匯總和分析功能,成為了 Excel 用戶(hù) ...
2025-07-11尊敬的考生: 您好! 我們誠(chéng)摯通知您,CDA Level I和 Level II考試大綱將于 2025年7月25日 實(shí)施重大更新。 此次更新旨在確保認(rèn) ...
2025-07-10BI 大數(shù)據(jù)分析師:連接數(shù)據(jù)與業(yè)務(wù)的價(jià)值轉(zhuǎn)化者? ? 在大數(shù)據(jù)與商業(yè)智能(Business Intelligence,簡(jiǎn)稱(chēng) BI)深度融合的時(shí)代,BI ...
2025-07-10SQL 在預(yù)測(cè)分析中的應(yīng)用:從數(shù)據(jù)查詢(xún)到趨勢(shì)預(yù)判? ? 在數(shù)據(jù)驅(qū)動(dòng)決策的時(shí)代,預(yù)測(cè)分析作為挖掘數(shù)據(jù)潛在價(jià)值的核心手段,正被廣泛 ...
2025-07-10數(shù)據(jù)查詢(xún)結(jié)束后:分析師的收尾工作與價(jià)值深化? ? 在數(shù)據(jù)分析的全流程中,“query end”(查詢(xún)結(jié)束)并非工作的終點(diǎn),而是將數(shù) ...
2025-07-10CDA 數(shù)據(jù)分析師考試:從報(bào)考到取證的全攻略? 在數(shù)字經(jīng)濟(jì)蓬勃發(fā)展的今天,數(shù)據(jù)分析師已成為各行業(yè)爭(zhēng)搶的核心人才,而 CDA(Certi ...
2025-07-09【CDA干貨】單樣本趨勢(shì)性檢驗(yàn):捕捉數(shù)據(jù)背后的時(shí)間軌跡? 在數(shù)據(jù)分析的版圖中,單樣本趨勢(shì)性檢驗(yàn)如同一位耐心的偵探,專(zhuān)注于從單 ...
2025-07-09year_month數(shù)據(jù)類(lèi)型:時(shí)間維度的精準(zhǔn)切片? ? 在數(shù)據(jù)的世界里,時(shí)間是最不可或缺的維度之一,而year_month數(shù)據(jù)類(lèi)型就像一把精準(zhǔn) ...
2025-07-09CDA 備考干貨:Python 在數(shù)據(jù)分析中的核心應(yīng)用與實(shí)戰(zhàn)技巧? ? 在 CDA 數(shù)據(jù)分析師認(rèn)證考試中,Python 作為數(shù)據(jù)處理與分析的核心 ...
2025-07-08SPSS 中的 Mann-Kendall 檢驗(yàn):數(shù)據(jù)趨勢(shì)與突變分析的有力工具? ? ? 在數(shù)據(jù)分析的廣袤領(lǐng)域中,準(zhǔn)確捕捉數(shù)據(jù)的趨勢(shì)變化以及識(shí)別 ...
2025-07-08備戰(zhàn) CDA 數(shù)據(jù)分析師考試:需要多久?如何規(guī)劃? CDA(Certified Data Analyst)數(shù)據(jù)分析師認(rèn)證作為國(guó)內(nèi)權(quán)威的數(shù)據(jù)分析能力認(rèn)證 ...
2025-07-08LSTM 輸出不確定的成因、影響與應(yīng)對(duì)策略? 長(zhǎng)短期記憶網(wǎng)絡(luò)(LSTM)作為循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)的一種變體,憑借獨(dú)特的門(mén)控機(jī)制,在 ...
2025-07-07統(tǒng)計(jì)學(xué)方法在市場(chǎng)調(diào)研數(shù)據(jù)中的深度應(yīng)用? 市場(chǎng)調(diào)研是企業(yè)洞察市場(chǎng)動(dòng)態(tài)、了解消費(fèi)者需求的重要途徑,而統(tǒng)計(jì)學(xué)方法則是市場(chǎng)調(diào)研數(shù) ...
2025-07-07CDA數(shù)據(jù)分析師證書(shū)考試全攻略? 在數(shù)字化浪潮席卷全球的當(dāng)下,數(shù)據(jù)已成為企業(yè)決策、行業(yè)發(fā)展的核心驅(qū)動(dòng)力,數(shù)據(jù)分析師也因此成為 ...
2025-07-07剖析 CDA 數(shù)據(jù)分析師考試題型:解鎖高效備考與答題策略? CDA(Certified Data Analyst)數(shù)據(jù)分析師考試作為衡量數(shù)據(jù)專(zhuān)業(yè)能力的 ...
2025-07-04SQL Server 字符串截取轉(zhuǎn)日期:解鎖數(shù)據(jù)處理的關(guān)鍵技能? 在數(shù)據(jù)處理與分析工作中,數(shù)據(jù)格式的規(guī)范性是保證后續(xù)分析準(zhǔn)確性的基礎(chǔ) ...
2025-07-04CDA 數(shù)據(jù)分析師視角:從數(shù)據(jù)迷霧中探尋商業(yè)真相? 在數(shù)字化浪潮席卷全球的今天,數(shù)據(jù)已成為企業(yè)決策的核心驅(qū)動(dòng)力,CDA(Certifie ...
2025-07-04CDA 數(shù)據(jù)分析師:開(kāi)啟數(shù)據(jù)職業(yè)發(fā)展新征程? ? 在數(shù)據(jù)成為核心生產(chǎn)要素的今天,數(shù)據(jù)分析師的職業(yè)價(jià)值愈發(fā)凸顯。CDA(Certified D ...
2025-07-03