R語(yǔ)言-如何循環(huán)讀取excel并保存為RData
之前寫(xiě)過(guò)一個(gè)循環(huán)讀取excel的代碼,最近又有了新的需求:循環(huán)讀取xlsx文件中的多個(gè)sheet,處理完之后循環(huán)輸出到xlsx文件中的多個(gè)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里面的多個(gè)sheet就簡(jiǎn)單多了,畢竟xlsx的文件名都是一致的,只是sheetIndex不一樣:
2、循環(huán)讀取xlsx文件中的多個(gè)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]]) }
下面這面這段代碼是抄來(lái)的,還沒(méi)來(lái)得及嘗試能不能循環(huán)寫(xiě)入sheet了。
3、循環(huán)創(chuàng)建xlsx中的多個(gè)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個(gè)sheet寫(xiě)入數(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ě)入的功能無(wú)法實(shí)現(xiàn),于是使用openxlsx包解決該問(wèn)題。
4、創(chuàng)建xlsx,寫(xiě)入多個(gè)sheet
首先按照網(wǎng)上的教程安裝了openxlsx,并進(jìn)行了實(shí)驗(yàn):
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:/信和資料/項(xiàng)目/門(mén)店績(jī)效/湖南益陽(yáng)/writeCommentExample.xlsx", overwrite = TRUE)
但在最后保存時(shí)報(bào)錯(cuò),因?yàn)槭窃趙indows環(huán)境下,保存時(shí)提示安裝Rtools,windows系統(tǒng)下安裝完成后,需要添加系統(tǒng)變量D:\Rtools\bin;D:\Rtools\gcc-4.6.3\bin,添加完成后,重啟電腦,發(fā)現(xiàn)保存成功。
下面,需要循環(huán)將多個(gè)sheet寫(xiě)入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:/信和資料/項(xiàng)目/門(mén)店績(jī)效/湖南益陽(yáng)/薪水借.xlsx", overwrite = TRUE)
讀入數(shù)據(jù):
files = list.files(pattern='*.Rdata') fload = lapply(files, function(x) get(load(x)))
合并多個(gè)數(shù)據(jù)框
edata4 <- Reduce(function(x,y) merge(x = x, y = y, by = c('lon','lat')),list(dtr01, dtr02, dtr03))
補(bǔ)充:R語(yǔ)言:批量循環(huán)讀取一系列excel文件
例如有20個(gè)excel文件分別代表20個(gè)亞組的數(shù)據(jù),文件名為亞組名P01-P20,每個(gè)文件中的變量個(gè)數(shù)和名稱等都是相同的,可通過(guò)以下命令實(shí)現(xiàn)一次性讀取20個(gè)excel,并生成一個(gè)新變量提示來(lái)自哪個(gè)亞組(同時(shí)展示如何讀取每個(gè)excel第二列數(shù)據(jù)的前11個(gè)字符生成一個(gè)新變量id)。
例如P01數(shù)據(jù)如下:
首先
讀取excel文件先要安裝package: XLConnect:
install.packages(XLConnect) library(XLConnect)
其次
生成代表亞組名稱的新變量和第二列前11個(gè)字符的新變量:
temp<-list.files(pattern="*.xls") //生成一個(gè)新變量temp代表文件路徑中所有后綴為xls的文件的文件名 head(temp) a=readWorksheetFromFile(temp[1],sheet=1) //讀取temp1號(hào)excel即P01,命名為數(shù)據(jù)庫(kù)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個(gè)字符 ncol(a) //看看a有多少個(gè)變量,新生成的plate和id變量為最后兩個(gè),假設(shè)為第58和59個(gè)變量 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,展示如下
最后
對(duì)P02-20寫(xiě)一個(gè)for循環(huán)語(yǔ)句,導(dǎo)入進(jì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) }
命令翻譯:對(duì)每一個(gè)i值,i從2到temp的最大值之間取值,生成一個(gè)文件newfile=之前P01的txt文件,下面四行是重復(fù)上面生成P01file的過(guò)程。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。
相關(guān)文章
R語(yǔ)言ggplot2邊框背景去除的實(shí)現(xiàn)
這篇文章主要介紹了R語(yǔ)言ggplot2邊框背景去除的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03Rstudio中安裝package出現(xiàn)的問(wèn)題及解決
這篇文章主要介紹了Rstudio中安裝package出現(xiàn)的問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-04-04Rcpp和RcppArmadillo創(chuàng)建R語(yǔ)言包的實(shí)現(xiàn)方式
這篇文章主要為大家介紹了Rcpp和RcppArmadillo創(chuàng)建R包實(shí)現(xiàn)方式,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2021-11-11R語(yǔ)言隨機(jī)數(shù)生成的實(shí)現(xiàn)
這篇文章主要介紹了R語(yǔ)言隨機(jī)數(shù)生成的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03R語(yǔ)言多元Logistic邏輯回歸應(yīng)用實(shí)例
這篇文章主要給大家介紹了關(guān)于R語(yǔ)言多元Logistic邏輯回歸應(yīng)用的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03R語(yǔ)言開(kāi)發(fā)之CSV文件的讀寫(xiě)操作實(shí)現(xiàn)
這篇文章主要介紹了R語(yǔ)言開(kāi)發(fā)之CSV文件的讀寫(xiě)操作實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03R語(yǔ)言實(shí)現(xiàn)地理加權(quán)回歸(GWR)
這篇文章主要為大家介紹了R語(yǔ)言實(shí)現(xiàn)地理加權(quán)回歸(GWR)操作流程示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-10-10R語(yǔ)言兩組變量特征相關(guān)關(guān)系熱圖繪制畫(huà)法
本文為大家介紹了如何畫(huà)兩組變量(特征)的相關(guān)關(guān)系熱圖的方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步2022-02-02R語(yǔ)言繪制Facet violin plot小提琴刻面圖實(shí)現(xiàn)示例
這篇文章主要為大家介紹了R語(yǔ)言繪制Facet violin plot小提琴刻面圖的實(shí)現(xiàn)示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步2022-02-02