我编写了一个函数,在给出文件夹的方向后,将其中的所有 excel 文件合并到一个数据框中,并进行一些适度的修改。
然而,我有两件小事想补充,但又遇到了困难:
- 每个文件的名称中都有一个国家代码,我希望该函数在数据框中创建一个附加列“国家”,其中每个观察值都将被分配这样的国家代码。名称示例:BGR_CO2_May12
- 每个文件由多张纸组成,每张纸代表年份;这些年也叫这些床单。我希望该函数创建另一列“Year”,其中每个观察都将被分配它来自的工作表的名称。
有没有一种巧妙的方法来做到这一点?可能不修改当前功能?
multmerge_xls_TEST <- function(mypath2) {
library(dplyr)
library(readxl)
library(XLConnect)
library(XLConnectJars)
library(stringr)
# This function gets the list of files in a given folder
re_file <- ".+\\.xls.?"
testFiles <- list.files(path = mypath2,
pattern = re_file,
full.names = TRUE)
# This function rbinds in a single dataframe the content of multiple sheets in the same workbook
# (assuming that all the sheets have the same column types)
# It also removes the first sheet (no data there)
rbindAllSheets <- function(file) {
wb <- loadWorkbook(file)
removeSheet(wb, sheet = 1)
sheets <- getSheets(wb)
do.call(rbind,
lapply(sheets, function(sheet) {
readWorksheet(wb, sheet)
})
)
}
# Getting a single dataframe for all the Excel files and cutting out the unnecessary variables
result <- do.call(rbind, lapply(testFiles, rbindAllSheets))
result <- result[,c(1,2,31)]