如何在 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)
我正在寻找一种更有效的方式来编写以下内容:
读入我的所有 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)