如何在R中按列名导入Excel指定列且不读取整个文件
在R中仅导入Excel指定列名的列(不读取整个文件)
你当前的代码是先读取整个工作表再提取指定列,本质上还是加载了所有列到内存里。要实现不读取整个文件只导入目标列,推荐用以下两种方法:
方法1:使用readxl包的col_select参数
readxl包的read_excel()函数原生支持通过列名筛选,无需先读取全量数据。直接在函数内指定col_select参数即可:
library(readxl) col_list <- c("Name", "Alpha", "Beta") Month1_2020 <- read_excel("Complete Data.xlsx", sheet = "Month1_2020", col_select = col_list)
这个参数会让函数只读取你指定的列,不会加载其他列(比如Gamma)到内存,完全规避了列顺序变化带来的影响。
方法2:使用openxlsx包的cols参数
如果你习惯用openxlsx包,可先将目标列名转换成对应索引,再通过cols参数指定读取:
library(openxlsx) col_list <- c("Name", "Alpha", "Beta") # 获取工作表的列名列表并匹配目标列的索引 sheet_col_names <- read.xlsx("Complete Data.xlsx", sheet = "Month1_2020", colNames = TRUE, rows = 1) col_indices <- match(col_list, names(sheet_col_names)) Month1_2020 <- read.xlsx("Complete Data.xlsx", sheet = "Month1_2020", cols = col_indices)
这种方式同样能实现只读取目标列的效果,且依赖列名而非固定列位置。
注意:避免使用先读全表再取子集的写法(比如你之前的[c(col_list)]),这种方式并没有减少文件读取的量,只是在内存中做了二次筛选。
内容的提问来源于stack exchange,提问作者sudeep mallya
相关产品推荐
相关产品推荐

