日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

R 脚本读取汇总 Excel 表格数据

發(fā)布時間:2023/12/20 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 R 脚本读取汇总 Excel 表格数据 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

主要用到了?xlsx?和?rJava?包,打開 Excel 文件,讀取各表格數據,再寫入到匯總表。

下圖為處理前的原始數據表格:

下圖為處理后的數據:

代碼實現

安裝&加載包的函數實現。installed.packages()?函數獲取所有已安裝的包,用以排除已安裝的包。install.packages()?函數安裝指定的包。library()?加載引入包。

? loadLibrary <- function(pkgs) {uninstalledPkgs <- pkgs[!(pkgs %in% installed.packages()[, "Package"])]if (length(uninstalledPkgs)) {install.packages(uninstalledPkgs)}for (pkg in pkgs) {library(pkg, character.only = TRUE, quietly = TRUE)} }

自定義設置。涉及表格文件路徑、匯總表名等。

? setwd("/path/to/work/dir") # 工作目錄 fileName = "summary_sheet_demo.xlsx" # 處理的表格文件 summaryName = "匯總" # 匯總的 sheet 表名 summarySheet = FALSE # 對象變量、忽略 startRow = 2 # 匯總表中操作起始行

設置 CRAN 源。官方默認源可能比較慢,所以選擇國內的源很重要。此處選擇了清華 CRAN 源,其他的可參考?CRAN Mirrors。

? options(repos = "https://mirrors.tuna.tsinghua.edu.cn/CRAN/")

加載依賴包。用到了上述寫的安裝加載包的函數。

? loadLibrary(c("xlsx", "rJava"))

打開工作表。loadWorkbook()?打開指定路徑的表格文件,并加載到工作簿對象中。

? wb <- loadWorkbook(fileName)

遍歷查詢&匯總數據

? # 獲取所有表格 sheets <- getSheets(wb)# 循環(huán)所有表格,找出需要寫入的表 for (sheet in sheets) {sheetName <- sheet$getSheetName()if (sheetName == summaryName) {summarySheet <- sheet} }if (summarySheet == FALSE) {stop(paste("表:", summaryName, "未找到")) }# 指定Date格式(此處可忽略) # options(xlsx.date.format='yyyy/MM/dd')# 遍歷所有表格 for (sheet in sheets) {# 過濾掉需寫入的表sheetName <- sheet$getSheetName()if (sheetName == summaryName) {next}# 獲取表格【內容行數】rowNum <- sheet$getLastRowNum()print(paste("表名:", sheetName, "總共:", rowNum, "行,", sep = " "))# 讀取表格內容 參數 colClasses 指定每列的類型(實際是指定處理該列的類/對象)data <- read.xlsx2(fileName, sheetName = sheetName, header = FALSE, startRow = 2, colClasses = c("character", "Date", "integer", "integer", rep("numeric", 2), "integer"))print(data)# 將表格內容寫入匯總的那張表addDataFrame(data, summarySheet, col.names = FALSE, row.names = FALSE, startRow = startRow)# 累加行數startRow <- startRow + rowNum }

把對象內容寫入文件中保存

? saveWorkbook(wb, fileName)

完整代碼

? # 包加載/安裝包 loadLibrary <- function(pkgs) {uninstalledPkgs <- pkgs[!(pkgs %in% installed.packages()[, "Package"])]if (length(uninstalledPkgs)) {install.packages(uninstalledPkgs)}for (pkg in pkgs) {library(pkg, character.only = TRUE, quietly = TRUE)} }# 自定義配置 setwd("/path/to/work/dir") # 工作目錄 fileName = "summary_sheet_demo.xlsx" # 處理的表格文件 summaryName = "匯總" # 匯總的 sheet 表名 summarySheet = FALSE # 對象變量、忽略 startRow = 2 # 匯總表中操作起始行# 設置CRAN options(repos = "https://mirrors.tuna.tsinghua.edu.cn/CRAN/")# 加載依賴包 loadLibrary(c("xlsx", "rJava"))# 打開Excel表格 wb <- loadWorkbook(fileName) # 獲取所有表格 sheets <- getSheets(wb)# 循環(huán)所有表格,找出需要寫入的表 for (sheet in sheets) {sheetName <- sheet$getSheetName()if (sheetName == summaryName) {summarySheet <- sheet} }if (summarySheet == FALSE) {stop(paste("表:", summaryName, "未找到")) }# 指定Date格式(此處可忽略) # options(xlsx.date.format='yyyy/MM/dd')# 遍歷所有表格 for (sheet in sheets) {# 過濾掉需寫入的表sheetName <- sheet$getSheetName()if (sheetName == summaryName) {next}# 獲取表格【內容行數】rowNum <- sheet$getLastRowNum()print(paste("表名:", sheetName, "總共:", rowNum, "行,", sep = " "))# 讀取表格內容 參數 colClasses 指定每列的類型(實際是指定處理該列的類/對象)data <- read.xlsx2(fileName, sheetName = sheetName, header = FALSE, startRow = 2, colClasses = c("character", "Date", "integer", "integer", rep("numeric", 2), "integer"))print(data)# 將表格內容寫入匯總的那張表addDataFrame(data, summarySheet, col.names = FALSE, row.names = FALSE, startRow = startRow)# 累加行數startRow <- startRow + rowNum }# 最后需要把對象內容寫入文件中 saveWorkbook(wb, fileName)

表格附件

summary_sheet_demo.xlsx

總結

以上是生活随笔為你收集整理的R 脚本读取汇总 Excel 表格数据的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。