我正在尝试从 excel 工作簿中读取工作表。该工作簿中有 10 张纸,所有工作表都有不同的名称。
我想做什么:
- 读取工作簿的第一个工作表的名称(假设名称为"我的工作表" 1"(
- 将数据读入名称应为My_Sheet_1的数据帧
- 更改列名称,例如新列应具有"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"