合并多个文件,同时保持其身份
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 <- "2014_1"
和其他文件相同。
感谢您回复 JeremyS。不幸的是,我在每个文件夹中有超过 30 个文件,所以我正在寻找一种更快的方法来做到这一点。另外,至于ben au的回复,我不知道会怎样。
这篇带有 JeremyS ***.com/questions/21107006/… 答案的帖子向您展示了如何做您需要的事情以上是关于合并多个文件,同时保持其身份的主要内容,如果未能解决你的问题,请参考以下文章
在哪里存储身份验证令牌(前端)以及如何将其放入多个端点的 http 标头中?