如何解决如何在R中编写一个函数类似于SAS宏来导入和格式化Excel文件列表?
我正在寻找一种更有效的方式来编写以下内容:
读取我所有的Excel文件
DF1 <- read_excel(DF1,sheet = "ABC",range = cell_cols(1:10) )
DF2 <- read_excel(DF2,range = cell_cols(1:10) )
etc...
DF50 <- read_excel(DF50,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)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。