如何合并不同数据框/txt文件中具有不同行数的列

问题描述 投票:0回答:1

我有几个数据框(txt 文件),具有相同的列数(20),但行数不同。 例如, 尺寸11770x20

基因_Id Chr 开始 结束 长度 阅读 TPM 外显子长度 外显子阅读 外显子TPM
LOC117243535 NW_022882922.1 58793 59875 1083 8 0.510339 1083 8 0.289397
LOC117243589 NW_022882922.1 60266 61228 963 12 0.860899 614 6 0.382839
LOC117243573 NW_022882922.1 75178 81169 5992 41 0.472726 1051 31 1.15556
LOC117243530 NW_022882922.1 82581 87265 4685 3073 45.3158 3696 3067 32.5099
LOC117243513 NW_022882922.1 87408 92509 5102 1972 26.7032 3895 1957 19.6841
LOC117243540 NW_022882922.1 92501 93993 1493 817 37.8059 1386 816 23.0654
LOC117243522 NW_022882922.1 94375 99883 5509 9133 114.535 3477 9068 102.174

尺寸11683x20

7508
基因_Id Chr 开始 结束 长度 阅读 TPM 外显子长度 外显子阅读 外显子TPM
LOC117243535 NW_022882922.1 58793 59875 1083 5 0.294678 1083 5 0.197168
LOC117243589 NW_022882922.1 60266 61228 963 13 0.861636 614 7 0.486882
LOC117243573 NW_022882922.1 75178 81169 5992 23 0.244998 1051 7 0.284439
LOC117243530 NW_022882922.1 82581 87265 4685 3012 41.0348 3696 2981 34.4448
LOC117243513 NW_022882922.1 87408 92509 5102 1565 19.5786 3895 1554 17.0388
LOC117243540 NW_022882922.1 92501 93993 1493 647 27.6599 1386 644 19.8434
LOC117243522 NW_022882922.1 94375 99883 5509 7499 86.8835 3477 7455 91.5666
LOC117234422 NW_022882922.1 101930 108153 6224 459 4.70706 3120 423 5.79002
LOC117234352 NW_022882922.1 108188 113107 4920 355 4.60543 3325 350 4.49542
LOC117230168 NW_022882922.1 114666 128596 13931 1666 7.63308 3119 1534 21.0041
LOC117230189 NW_022882922.1 128634 1314972864 409 9.11501 2001 401 8.55838
LOC117230196 NW_022882922.1 131822 137028 5207 5569 68.2648 2303 5539 102.714

我想循环遍历所有 txt 文件并合并所有 TPM 列以创建数据框/矩阵,但我的问题/问题是每个数据框/txt 文件具有不同的行数,因此,可能会存在一些行在文件 A 中但在文件 B 中缺失,反之亦然。 因此,我需要使用 Gene_Id 正确匹配行。

谢谢;

我考虑过使用 dplyr 或 tidyverse,但我不确定如何确保行正确匹配,因此矩阵/数据框不会混乱。

r matrix merge merging-data
1个回答
0
投票

当所有 txt 文件合并后,尚不清楚您打算如何使用数据,因此这个答案可能不是格式化数据的最佳方法。但是,根据您的描述,此代码将通过 Gene_Id 连接/合并您的所有 txt 文件,无论行数如何。

对于此示例,我使用示例数据创建了制表符分隔的 txt 文件,并将它们保存在我的工作目录中名为“data”的文件夹中。如果您不属于这种情况,您将需要修改代码。

重复的列名将附加一个后缀,以确保列名是唯一的,并且文件将按照它们在“文件”列表中出现的顺序进行连接。换句话说,您可以在每次后缀更改时跟踪原始 txt 文件。

library(dplyr)

# Create list of txt files from folder (e.g. "data" folder in working directory)
files <- list.files("data/",
                    pattern="*.txt$", 
                    full.names = TRUE)
files
# [1] "data/flie_a.txt" "data/flie_b.txt"

# Load all txt files as tables in a list
dfs <- lapply(files, read.table, header = TRUE, sep = "\t")

# Combine all objects in dfs
df_all <- Reduce(function(x, y) full_join(x, y, by = "Gene_Id"), dfs)

df_all
#         Gene_Id          Chr.x Start.x End.x Length.x Reads.x      TPM.x ExonLength.x ExonReads.x  ExonTPM.x          Chr.y Start.y  End.y Length.y Reads.y     TPM.y ExonLength.y ExonReads.y  ExonTPM.y
# 1  LOC117243535 NW_022882922.1   58793 59875     1083       8   0.510339         1083           8   0.289397 NW_022882922.1   58793  59875     1083       5  0.294678         1083           5   0.197168
# 2  LOC117243589 NW_022882922.1   60266 61228      963      12   0.860899          614           6   0.382839 NW_022882922.1   60266  61228      963      13  0.861636          614           7   0.486882
# 3  LOC117243573 NW_022882922.1   75178 81169     5992      41   0.472726         1051          31   1.155560 NW_022882922.1   75178  81169     5992      23  0.244998         1051           7   0.284439
# 4  LOC117243530 NW_022882922.1   82581 87265     4685    3073  45.315800         3696        3067  32.509900 NW_022882922.1   82581  87265     4685    3012 41.034800         3696        2981  34.444800
# 5  LOC117243513 NW_022882922.1   87408 92509     5102    1972  26.703200         3895        1957  19.684100 NW_022882922.1   87408  92509     5102    1565 19.578600         3895        1554  17.038800
# 6  LOC117243540 NW_022882922.1   92501 93993     1493     817  37.805900         1386         816  23.065400 NW_022882922.1   92501  93993     1493     647 27.659900         1386         644  19.843400
# 7  LOC117243522 NW_022882922.1   94375 99883     5509    9133 114.535000         3477        9068 102.174000 NW_022882922.1   94375  99883     5509    7499 86.883500         3477        7455  91.566600
# 8  LOC117234422           <NA>      NA    NA       NA      NA         NA           NA          NA         NA NW_022882922.1  101930 108153     6224     459  4.707060         3120         423   5.790020
# 9  LOC117234352           <NA>      NA    NA       NA      NA         NA           NA          NA         NA NW_022882922.1  108188 113107     4920     355  4.605430         3325         350   4.495420
# 10 LOC117230168           <NA>      NA    NA       NA      NA         NA           NA          NA         NA NW_022882922.1  114666 128596    13931    1666  7.633080         3119        1534  21.004100
# 11 LOC117230189           <NA>      NA    NA       NA      NA         NA           NA          NA         NA NW_022882922.1  128634 131497     2864     409  9.115010         2001         401   8.558380
# 12 LOC117230196           <NA>      NA    NA       NA      NA         NA           NA          NA         NA NW_022882922.1  131822 137028     5207    5569 68.264800         2303        5539 102.714000
© www.soinside.com 2019 - 2024. All rights reserved.