<aside> 📢 部分内容学习自学习自张敬信老师

</aside>

1.批量导入且以文件名作为变量名

特点:文件名按文件名赋值给变量

注意:文件名中不能含括号之类不能形成变量名的非法字符,数字也不能开头

name <- list.files("测试") #获取指定文件夹啊中文件列表
name2 <- tools::file_path_sans_ext(name) #去除文件拓展名
path <- list.files("./测试", full.names = TRUE)

m <- ""#建立容器
for (i in c(1:length(path))) {
  x <- read.table(path[i])
  m <- paste(name2[i]," <- ","x",sep="")
  eval(parse(text=m))
}

下面这个很绝

name <- list.files("测试")#获取指定文件夹啊中文件列表
name2 <- tools::file_path_sans_ext(name)#去除文件拓展名
path <- list.files("./测试", full.names = TRUE)

for (i in 1:length(path)) {
  assign(name2[i],read.table(path[i])) #assign指定内容并赋值
}

2. 批量合并csv或xlsx文件(列名相同)

  1. 用循环
library(tidyverse)
files <- list.files("./PRE2010", pattern = "*.csv$", full.names = TRUE)

df <- tibble()
for (i in 1:length(files)) {
  df <- bind_rows(df,read.csv(files[i],header = F))
}
  1. 用purrr包
library(tidyverse)
files <- list.files("./PRE2010", pattern = "*.csv$", full.names = TRUE)

df <- map_dfr(files, read_csv, col_names=F)    # 批量读取+按行堆叠合并,这一步read_csv可变换为read_xlsx,read.csv等,参数写在后面
  1. rio包
files <- list.files("./PRE2010", pattern = "*.csv$", full.names = TRUE)

df = import_list(path, rbind = T)

3. 批量合并excel文件下多个sheet(列名相同)

library(tidyverse)
library(readxl)

path = "E:/download/中国生物多样性红色名录包含特有种(2020)一一高等植物卷.xlsx"

sheet <- readxl::excel_sheets(path)

df <- map_dfr(sheet, ~ read_xlsx(path, sheet = .x))  # 批量读取+按行堆叠合并

4. 批量合并列名不同数据(不同xlsx)

files <- list.files("datas/", pattern = "xlsx", full.names = TRUE)

df <- map(files, read_xlsx) %>% reduce(full_join, by = "人名")                  # 读入并依次做全连接

Untitled

Untitled

5. 批量合并列名不同数据(同一xlsx,不同sheet)