在单独的数据帧中读取 excel 工作簿的每个工作表,并通过在列前加上工作表名称前缀来重命名列



我正在尝试从 excel 工作簿中读取工作表。该工作簿中有 10 张纸,所有工作表都有不同的名称。

我想做什么:

  1. 读取工作簿的第一个工作表的名称(假设名称为"我的工作表" 1"(
  2. 将数据读入名称应为My_Sheet_1的数据帧
  3. 更改列名称,例如新列应具有"My_Sheet_1_"作为前缀,以便如果工作表中的列名称为 "My Column 1",然后在R的data.frame中,它应该重命名为 "My_Sheet_1_My_Column_1"...等等。

我尝试使用:

read_allsheets_from_excel <- function(filename) {
sheets   <- excel_sheets(filename)
x        <- lapply(sheets, function(X) read_excel(filename, sheet = X))
names(x) <- sheets
x
}
# read now
read_allsheets_from_excel("DATA.XLSX")

还尝试过:

My_Column_1 <- read.xlsx("DATA.XLSX", sheetIndex = 1)
colnames(My_Column_1) <- colnames(My_Column_1, do.NULL = TRUE, prefix = "My_Sheet_1")

但没有一个有效。这也不是在所有 10 张不同工作表上自动化的好方法。如何改进?

你快到了。您需要做的是重命名循环中的列,并使用assign在全局环境中创建变量

library(readxl)
datasets <- readxl_example("datasets.xlsx")
read_allsheets_from_excel <- function(filename) {
sheets <- excel_sheets(filename)
setNames(lapply(sheets, function(.) {
tbl <- read_excel(filename, sheet = .)
names(tbl) <- paste(., names(tbl), sep = "_")
tbl
}), sheets)
}
# read now
allSheets <- read_allsheets_from_excel(datasets)
lapply(names(allSheets), function(nam) 
assign(nam, allSheets[[nam]], envir = .GlobalEnv))
ls()
# [1] "allSheets"                 "chickwts"                 
# [3] "datasets"                  "iris"                     
# [5] "mtcars"                    "quakes"                   
# [7] "read_allsheets_from_excel"

最新更新