gpt4 book ai didi

R:快速绑定(bind)大量文件

转载 作者:行者123 更新时间:2023-12-03 19:01:58 25 4
gpt4 key购买 nike

我之前写过一篇(类似的)帖子here我试图创建一个宽表而不是长表。我意识到最好让我的表格采用长格式,所以我将它作为一个不同的问题发布。我也发布了我尝试过的内容。

我正在使用 R使用以下方法 rbind 约 11000 个文件:

# get list of ~11000 files
lfiles <- list.files(pattern = "*.tsv", full.names = TRUE)

# row-bind the files
# use rbindlist to rbind and fread to read files
# use mclapply I am assigning 32 cores to it
# add the file basename as the id to identify rows
dat <- rbindlist(mclapply(lfiles, function(X) {
data.frame(id = basename(tools::file_path_sans_ext(X)),
fread(X))},mc.cores = 32))

我使用 R 是因为我的下游处理(如创建绘图等)在 R 中。我有两个问题:

1. 有没有办法让我的代码更高效/更快?我知道最后预期的行数,所以如果我预先分配数据帧会有帮助吗?

2. 我应该如何保存(以什么格式)这些巨大的数据——作为 .RData 或作为数据库或其他东西?

作为附加信息:我想要完成三种类型的文件。它们看起来像这样:
[centos@ip data]$ head C021_0011_001786_tumor_RNASeq.abundance.tsv
target_id length eff_length est_counts tpm
ENST00000619216.1 68 26.6432 10.9074 5.69241
ENST00000473358.1 712 525.473 0 0
ENST00000469289.1 535 348.721 0 0
ENST00000607096.1 138 15.8599 0 0
ENST00000417324.1 1187 1000.44 0.0673096 0.000935515
ENST00000461467.1 590 403.565 3.22654 0.11117
ENST00000335137.3 918 731.448 0 0
ENST00000466430.5 2748 2561.44 162.535 0.882322
ENST00000495576.1 1319 1132.44 0 0

[centos@ip data]$ head C021_0011_001786_tumor_RNASeq.rsem.genes.norm_counts.hugo.tab
gene_id C021_0011_001786_tumor_RNASeq
TSPAN6 1979.7185
TNMD 1.321
DPM1 1878.8831
SCYL3 452.0372
C1orf112 203.6125
FGR 494.049
CFH 509.8964
FUCA2 1821.6096
GCLC 1557.4431

[centos@ip data]$ head CPBT_0009_1_tumor_RNASeq.rsem.genes.norm_counts.tab
gene_id CPBT_0009_1_tumor_RNASeq
ENSG00000000003.14 2005.0934
ENSG00000000005.5 5.0934
ENSG00000000419.12 1100.1698
ENSG00000000457.13 2376.9100
ENSG00000000460.16 1536.5025
ENSG00000000938.12 443.1239
ENSG00000000971.15 1186.5365
ENSG00000001036.13 1091.6808
ENSG00000001084.10 1602.7165

任何帮助将非常感激!

谢谢!

最佳答案

你不能比使用 fread 更快地做到这一点。和 rbindlist在 R 中。但是,您不应该使用 data.frame并复制数据。而是分配 by reference :

DF <- fread(X)
DF[, id := basename(tools::file_path_sans_ext(X))]
return(DF)

但是,您应该考虑使用数据库。

PS:正确的正则表达式是 ".+\\.tsv$" .这匹配任何带有一个或多个字符后跟一个点和字符串“tsv”后跟文件名结尾的文件名。

关于R:快速绑定(bind)大量文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38853796/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com