簡體   English   中英

如何在 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是一個數據幀列表,它通常更list_data管理,而不是在全局環境中擁有 50 個數據幀。 如果您仍然希望所有數據幀分別命名列表並使用list2env

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM