如何在 R 中编写函数(类似于 SAS 宏)来导入和格式化 Excel 文件列表?

How do I write a function (analogous to a SAS macro) in R to import and format a list of Excel files?

我正在寻找一种更有效的方式来编写以下内容:

读入我的所有 Excel 个文件

DF1 <- read_excel(DF1, sheet = "ABC", range = cell_cols(1:10) )
DF2 <- read_excel(DF2, sheet = "ABC", range = cell_cols(1:10) )
etc...
DF50 <- read_excel(DF50, sheet = "ABC", range = cell_cols(1:10) )

为每个 DF 添加一列,其中包含一个位置

DF1$Location <- location1
DF2$Location <- location2
etc...
DF50$Location <- location50

仅保留具有指定名称的列,删除空白行,并将列 CR_NUMBER 转换为整数

library(hablar)
DF1 <- DF1 %>% select(all_of(colnames_r)) %>% filter(!is.na(NAME)) %>% convert(int(CR_NUMBER))
DF2 <- DF2 %>% select(all_of(colnames_r)) %>% filter(!is.na(NAME)) %>% convert(int(CR_NUMBER))
etc...
DF50 <- DF50 %>% select(all_of(colnames_r)) %>% filter(!is.na(NAME)) %>% convert(int(CR_NUMBER))

您可以尝试使用以下方法获取列表中的数据:

library(readxl)
library(hablar)
library(dplyr)

#Get the complete path of file which has name "DF" followed by a number.
file_names <- list.files('/folder/path', pattern = 'DF\d+', full.names = TRUE)

list_data <- lapply(seq_along(file_names), function(x) {
  data <- read_excel(file_names[x], sheet = "ABC", range = cell_cols(1:10))
  data %>%
    mutate(Location = paste0('location', x))
    select(all_of(colnames_r)) %>% 
    filter(!is.na(NAME)) %>% 
    convert(int(CR_NUMBER))
})

list_data 是一个数据帧列表,通常比在全局环境中拥有 50 个数据帧更好管理。如果您仍然希望所有数据帧分别命名列表并使用 list2env.

names(list_data) <- paste0('DF', seq_along(list_data))
list2env(list_data, .GlobalEnv)