合并多个文件,同时保持其身份

Posted

技术标签:

【中文标题】合并多个文件,同时保持其身份【英文标题】:Combining multiple files while maintaining their identities 【发布时间】:2014-10-25 05:28:16 【问题描述】:

跟进上一个问题; consolidating data frames in R 使用 lapply 可以完美地读取和合并多个 csv 文件。

我的问题是,假设您还想根据正在读取的文件名创建并附加一个标识符到此合并数据集。

例如,如果您有 2 个数据集并且它们是;

文件 2014_1.csv;

Var1 Var2
21   140 
2    134 
3    135 

文件 2014_2.csv;

Var1 Var2
21   131 
2    134 

我希望我的决赛桌看起来像这样;

Var1 Var2 Period
21   140  2014_1
2    134  2014_1
3    135  2014_1
21   131  2014_2
2    134  2014_2

有没有办法做到这一点?

【问题讨论】:

【参考方案1】:

使用data.table 中的fread(这样会更快)

 files <- list.files(pattern="\\d4_\\d.csv")
 library(data.table)
 library(tools)


  rbindlist(
     lapply(files, function(x) cbind(fread(x), Period=file_path_sans_ext(x)) ))
  #   Var1 Var2  Period
  #1:   21  140  2014_1
  #2:    2  134  2014_1
  #3:    3  135  2014_1
  #4:   21  131  2014_2
  #5:    2  134  2014_2

或者按照@Arun 的建议

 rbindlist(lapply(files, function(x) fread(x)[,Period:=file_path_sans_ext(x)]))

【讨论】:

我会使用:= 添加Period 而不是cbind @Arun 谢谢你的建议。【参考方案2】:

好的,我想通了。 以下代码获取文件夹中的所有 csv 文件,将文件名作为 id 变量附加并组合它们。

files <- list.files()
files
# read the files into a list of data.frames
data.list <- lapply(files, function(.file)
     dat<-read.csv(.file, header = F)
   dat$period<-as.character(.file)
dat
)
# concatenate into one big data.frame
data.cat <- do.call(rbind, data.list)

【讨论】:

【参考方案3】:

根据你之前的帖子,我会建议这样的事情

data.list <- cbind(lapply(files, read.csv), files)

【讨论】:

在每个列中添加一个额外的列,其中包含 cbind 之前的句点。即file1$Period &lt;- "2014_1" 和其他文件相同。 感谢您回复 JeremyS。不幸的是,我在每个文件夹中有超过 30 个文件,所以我正在寻找一种更快的方法来做到这一点。另外,至于ben au的回复,我不知道会怎样。 这篇带有 JeremyS ***.com/questions/21107006/… 答案的帖子向您展示了如何做您需要的事情

以上是关于合并多个文件,同时保持其身份的主要内容,如果未能解决你的问题,请参考以下文章

在多个区域扩展身份服务

在哪里存储身份验证令牌(前端)以及如何将其放入多个端点的 http 标头中?

在刷新身份验证令牌时处理多个未经授权的请求

无法保持页面刷新会话

Android GoogleSignIn:多个帐户同时+失败时延迟登录

组合一个到多个表并获取值