R语言批量导入具体不同表结构的多张csv

setwd("d:/wu/input")
# 读入文件目录
(fl <- list.files())
dt <- list()
# 用data.table的fread()最容易
# 结果保存在list中
for (i in 1:length(fl)) {
  dt[[i]] <- fread(fl[[i]],colClasses="character")
}
# 提取所有列名,去重
(nm <- lapply(dt, names) %>% unique())
# 定义函数,将包含相同列的表放到一个文件中
# 注意,此处汇总数据用的结构是data.table(),不是list()
my_input_a <- function(dt,nm){
  dm <- data.table()
  for (i in 1:length(dt)) {
    if(setequal(names(dt[[i]]),nm)){
      dm <- rbind(dm,dt[[i]][,.SD,.SDcols=nm])
    }
  }
  return(unique(dm))
}
# 用循环调用刚才定义的函数,所用的数据结构变回list
ds <- list()
for (i in 1:length(nm)) {
  ds[[i]] <- my_input_a(dt,nm[[i]])
}

上面的代码有点多,可以精简一下

getwd()
setwd("d:/myR")
library(tidyverse)
library(data.table)
(fl <- list.files())
# 定义一个列表的列表,每个列表存放一个原始文件
dt <- list()
for (i in 1:length(fl)) {
  dt[[i]] <- list()
}
# 将原始数据读入列表
for (i in 1:length(fl)) {
  dt[[i]] <- fread(fl[[i]],colClasses = "character")
}
# 提取所有列名,去重
(lapply(dt, names) %>% unique()->nm)
# 定义函数,比对列名,将格式相同的放到一个列表中
my_fun <- function(i,j){
  if(setequal(names(dt[[i]]),nm[[j]])){
    ds[[j]] <<- rbind(ds[[j]],dt[[i]])
  }
}
# 定义一个列表的列表,将格式相同的放到一个列表中
ds <- list()
for (i in 1:4) {
  ds[[i]] <- list()
}
# 通过两重循环完成匹配汇总
for (i in 1:length(fl)) {
  for (j in 1:4) {
    my_fun(i,j)
  }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值