R語言-如何循環(huán)讀取excel并保存為RData
之前寫過一個循環(huán)讀取excel的代碼,最近又有了新的需求:循環(huán)讀取xlsx文件中的多個sheet,處理完之后循環(huán)輸出到xlsx文件中的多個sheet中,總結(jié)一下。
1、循環(huán)讀取csv文件并輸出為RData格式
homedir <- "D:/Documents/tina/Database" #設(shè)置路徑 setwd(homedir) temp = list.files(pattern="*.csv") for (i in 1:length(temp)) { filename <- substr(temp[i], 1, nchar(temp[i])-4); assign(filename, read.csv(temp[i], header = T)); save(list = filename, file = paste(filename, ".Rdata", sep = "")) }
有了這段代碼,要循環(huán)讀取xlsx里面的多個sheet就簡單多了,畢竟xlsx的文件名都是一致的,只是sheetIndex不一樣:
2、循環(huán)讀取xlsx文件中的多個sheet:
library(xlsx) sheet.index <- c(1:12) data.list <- list() for(i in sheet.index){ filename <- paste0("month",i) data.list[[i]] <- read.xlsx("E:/某某中心年收入.xls", encoding = "UTF-8", sheetIndex = i) assign(filename, data.list[[i]]) }
下面這面這段代碼是抄來的,還沒來得及嘗試能不能循環(huán)寫入sheet了。
3、循環(huán)創(chuàng)建xlsx中的多個sheet
library(XLConnect) wb <- loadWorkbook('data.xlsx', create = TRUE) # 創(chuàng)建excel工作簿 # 創(chuàng)建sheet for (name in paste0('sheet', 1:3)) { createSheet(wb, name) } # 分別向3個sheet寫入數(shù)據(jù) writeWorksheet(wb, data_frame_1, 'sheet1') writeWorksheet(wb, data_frame_2, 'sheet2') writeWorksheet(wb, data_frame_3, 'sheet3') saveWorkbook(wb)
今天嘗試了第3部分的代碼,發(fā)現(xiàn)循環(huán)寫入的功能無法實現(xiàn),于是使用openxlsx包解決該問題。
4、創(chuàng)建xlsx,寫入多個sheet
首先按照網(wǎng)上的教程安裝了openxlsx,并進行了實驗:
library(openxlsx) wb <- createWorkbook() addWorksheet(wb, "Sheet 1") c1 <- createComment(comment = "this is comment") writeComment(wb, 1, col = "B", row = 10, comment = c1) s1 <- createStyle(fontSize = 12, fontColour = "red", textDecoration = c("BOLD")) s2 <- createStyle(fontSize = 9, fontColour = "black") c2 <- createComment(comment = c("This Part Bold red\n\n", "This part black"), style = c(s1, s2)) c2 writeComment(wb, 1, col = 6 , row = 3, comment = c2) addWorksheet(wb, "Sheet 1") saveWorkbook(wb, file = "E:/信和資料/項目/門店績效/湖南益陽/writeCommentExample.xlsx", overwrite = TRUE)
但在最后保存時報錯,因為是在windows環(huán)境下,保存時提示安裝Rtools,windows系統(tǒng)下安裝完成后,需要添加系統(tǒng)變量D:\Rtools\bin;D:\Rtools\gcc-4.6.3\bin,添加完成后,重啟電腦,發(fā)現(xiàn)保存成功。
下面,需要循環(huán)將多個sheet寫入xlsx文件中:
wb <- createWorkbook() addWorksheet(wb,"xsjshouru12") addWorksheet(wb, "xsjshouru18") addWorksheet(wb, "xsjshouru24") addWorksheet(wb, "xsjshouru36") writeData(wb,"xsjshouru12",xsjshouru12) writeData(wb,"xsjshouru18",xsjshouru18) writeData(wb,"xsjshouru24",xsjshouru24) writeData(wb,"xsjshouru36",xsjshouru36) #保存到本地文件 saveWorkbook(wb,file = "E:/信和資料/項目/門店績效/湖南益陽/薪水借.xlsx", overwrite = TRUE)
讀入數(shù)據(jù):
files = list.files(pattern='*.Rdata') fload = lapply(files, function(x) get(load(x)))
合并多個數(shù)據(jù)框
edata4 <- Reduce(function(x,y) merge(x = x, y = y, by = c('lon','lat')),list(dtr01, dtr02, dtr03))
補充:R語言:批量循環(huán)讀取一系列excel文件
例如有20個excel文件分別代表20個亞組的數(shù)據(jù),文件名為亞組名P01-P20,每個文件中的變量個數(shù)和名稱等都是相同的,可通過以下命令實現(xiàn)一次性讀取20個excel,并生成一個新變量提示來自哪個亞組(同時展示如何讀取每個excel第二列數(shù)據(jù)的前11個字符生成一個新變量id)。
例如P01數(shù)據(jù)如下:
首先
讀取excel文件先要安裝package: XLConnect:
install.packages(XLConnect) library(XLConnect)
其次
生成代表亞組名稱的新變量和第二列前11個字符的新變量:
temp<-list.files(pattern="*.xls") //生成一個新變量temp代表文件路徑中所有后綴為xls的文件的文件名 head(temp) a=readWorksheetFromFile(temp[1],sheet=1) //讀取temp1號excel即P01,命名為數(shù)據(jù)庫a a$plate=substr(as.character(temp[1]),1,3) //生成變量plate,數(shù)值為temp里的plate名稱(字符1到3) a$id=substr(a[,2],1,11) //生成變量id, 值為第二列數(shù)據(jù)的前11個字符 ncol(a) //看看a有多少個變量,新生成的plate和id變量為最后兩個,假設(shè)為第58和59個變量 write.table(a[,c(58,59)],file = "newfile.txt",row.names=F, na="",col.names=FALSE, sep=" ",append = T,quote=F) //生成txt文件newfile.txt為p01文件中的plate和id,展示如下
最后
對P02-20寫一個for循環(huán)語句,導入進去即可
for (i in 2: length(temp)){ newfile=read.table("newfile.txt") b=readWorksheetFromFile(temp[i],sheet=1) b$row=substr(as.character(temp[i]),1,3) b$extract=substr(b[,2],1,11) write.table(b[,c(58,59)],file = "newfile.txt",row.names=F, na="",col.names=FALSE, sep=" ",append = T,quote=F) }
命令翻譯:對每一個i值,i從2到temp的最大值之間取值,生成一個文件newfile=之前P01的txt文件,下面四行是重復上面生成P01file的過程。
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。如有錯誤或未考慮完全的地方,望不吝賜教。
相關(guān)文章
Rstudio中安裝package出現(xiàn)的問題及解決
這篇文章主要介紹了Rstudio中安裝package出現(xiàn)的問題及解決方案,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-04-04Rcpp和RcppArmadillo創(chuàng)建R語言包的實現(xiàn)方式
這篇文章主要為大家介紹了Rcpp和RcppArmadillo創(chuàng)建R包實現(xiàn)方式,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2021-11-11R語言兩組變量特征相關(guān)關(guān)系熱圖繪制畫法
本文為大家介紹了如何畫兩組變量(特征)的相關(guān)關(guān)系熱圖的方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步2022-02-02R語言繪制Facet violin plot小提琴刻面圖實現(xiàn)示例
這篇文章主要為大家介紹了R語言繪制Facet violin plot小提琴刻面圖的實現(xiàn)示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步2022-02-02