r语言 - 合并目录中具有相同名称对象的所有Rdata文件



我的数据我想将我的Rdata文件合并成一个具有相同对象名称并保存到目录中的新组合Rdata文件,有些人认为类似于此线程,但无法做到这一点得到错误任何人请建议任何简单的方法在R中做到这一点我是新的R无法弄清楚。

all.files = c("data1.Rdata", "data1.Rdata", "data1.Rdata")
mylist<- lapply(all.files, function(x) {
load(file = x)
get(ls()[ls()!= "filename"])
})
names(mylist) <- all.files

如果我理解正确的话,你想把所有的.RData变成一个单独的data.frame

一个选项是列出工作目录中扩展名为.RData的所有文件,使用rbind加载并组合它们:

ll <- list.files(pattern = '.RData')
res <- do.call(rbind,
lapply(ll, function(x) {

load(file = x)
get(ls())
}))

不,我们可以检查前6行。

head(res)
#     chrom     start       end                gid         gname                tid strand
#32590   chr7  45574608  45574777 ENSMUSG00000085214 0610005C13Rik ENSMUST00000130094      -
#109006  chr4 154023688 154023891 ENSMUSG00000078350 1190007F08Rik ENSMUST00000143047      -
#475764 chr15  83365029  83365513 ENSMUSG00000075511 1700001L05Rik ENSMUST00000178628      -
#448806 chr13  31567474  31567610 ENSMUSG00000038408 1700018A04Rik ENSMUST00000150418      -
#11159   chr6 147694981 147695041 ENSMUSG00000085077 1700049E15Rik ENSMUST00000152737      +
#339243 chr12  22958352  22960254 ENSMUSG00000073164 2410018L13Rik ENSMUST00000149246      -
#             class biotype byname.uniq bygid.uniq
#32590  altAcceptor lincRNA        TRUE       TRUE
#109006 altAcceptor lincRNA        TRUE       TRUE
#475764 altAcceptor lincRNA        TRUE       TRUE
#448806 altAcceptor lincRNA        TRUE       TRUE
#11159  altAcceptor lincRNA        TRUE       TRUE
#339243 altAcceptor lincRNA        TRUE       TRUE

and bottom 6 too:

tail(res)
#       chrom     start       end                gid gname                tid strand
#189235  chr6  90373711  90373841 ENSMUSG00000034430  Zxdc ENSMUST00000113539      +
#563026 chr11  72916473  72916587 ENSMUSG00000055670 Zzef1 ENSMUST00000069395      +
#563046 chr11  72916473  72916587 ENSMUSG00000055670 Zzef1 ENSMUST00000152481      +
#158407  chr3 152449013 152449128 ENSMUSG00000039068  Zzz3 ENSMUST00000106101      +
#158450  chr3 152449013 152449128 ENSMUSG00000039068  Zzz3 ENSMUST00000106103      +
#158465  chr3 152449016 152449128 ENSMUSG00000039068  Zzz3 ENSMUST00000089982      +
#             class        biotype byname.uniq bygid.uniq
#189235 altAcceptor protein_coding       FALSE      FALSE
#563026 altAcceptor protein_coding       FALSE      FALSE
#563046 altAcceptor protein_coding       FALSE      FALSE
#158407 altAcceptor protein_coding       FALSE      FALSE
#158450 altAcceptor protein_coding       FALSE      FALSE
#158465 altAcceptor protein_coding       FALSE      FALSE

,你可以检查尺寸。

dim(res)
#24279    11

编辑

这在R 4.0.3上有效。似乎R 4.1.1.失败了。我将用一个新的解决方案编辑答案。

我通常使用循环:

FileVector <- c("data1.Rdata", "data1.Rdata", "data1.Rdata")
Res <- vector(mode = "list",
length = length(FileVector))
for (m1 in seq_along(FileVector)) {
FilesLoaded <- load(file = FileVector[m1],
verbose = FALSE)
if ("filename" %in% FilesLoaded) {
Res[[m1]] <- get("filename")
}
rm(list = FilesLoaded)
}

这给了我们一个列表,我们可以在循环中添加其他检查,例如,不添加在任何列中都有值的数据,或者我们也可以检查每个新数据块以确保某些列名存在。如果您有现实世界的问题,例如某些数据文件没有正确生成,您也可以将load()调用包装在try()调用中。然后加上do.call()

# Null positions will be dropped
Res <- do.call(rbind,
Res)

list.files()这样的参数构建文件名向量并指定pattern =参数通常是有利的。

通常看起来像这样:

FileVector <- list.files(path = "~/my/directory",
full.names = TRUE,
pattern = "mypattern")

相关内容

最新更新