在R中读取多工作表Excel后,如何保留指定的8个工作表?
解决方案
用rio包的正确写法
你之前的代码错误使用了factorize()函数,这个函数的作用是将字符向量转换为因子并返回整数编码,只会取第一个元素对应的索引,所以只保留了"Tab1"。正确的做法是直接用工作表名称向量对列表进行索引:
# 先定义需要保留的工作表名称 keep_sheets <- c("Tab1", "Tab2", "Tab3", "Tab4", "Tab5", "Tab6", "Tab7", "Tab8") # 从已读取的列表中提取指定工作表 Data1 <- Data[keep_sheets]
另外,你也可以在import_list()一步就只读取需要的工作表,避免先读全部50个再筛选,效率更高:
Data1 <- import_list("/Users/Data.xlsx", sheet = keep_sheets)
其他可用包推荐
1. readxl(tidyverse生态,轻量易用)
可以针对性读取指定工作表,无需先加载全部内容:
library(readxl) library(purrr) keep_sheets <- c("Tab1", "Tab2", "Tab3", "Tab4", "Tab5", "Tab6", "Tab7", "Tab8") # 批量读取指定工作表 Data1 <- map(keep_sheets, ~read_excel("/Users/Data.xlsx", sheet = .x)) # 给列表元素命名(对应工作表名) names(Data1) <- keep_sheets
2. openxlsx(功能全面,支持读写操作)
支持直接批量读取指定工作表,处理大文件效率较好:
library(openxlsx) keep_sheets <- c("Tab1", "Tab2", "Tab3", "Tab4", "Tab5", "Tab6", "Tab7", "Tab8") # 批量读取指定工作表 Data1 <- lapply(keep_sheets, function(sheet) { read.xlsx("/Users/Data.xlsx", sheet = sheet) }) names(Data1) <- keep_sheets
内容的提问来源于stack exchange,提问作者Chinmay123
相关产品推荐
相关产品推荐

