繁体   English   中英

如何将矩阵的行名和列名与 R 中数据框中的列相匹配?

[英]How to match rownames and colnames of a matrix to a column in a dataframe in R?

我有一个文本文件,其中有一个名为ID的列,其值例如 ABC

variant_id gene tss_distance ma_samples ma_count  ID      
1  chr1 ENSG      80       68       78    A
2  chr1 ENSG      80       395      486   B
3  chr1 ENSG      80       167      183   C   

我有一个方形矩阵,所以有 5000 x 5000。rownames = colnames。 (我的矩阵列名和行名匹配)。 rownames 和 colnames 也匹配数据框中 ID 列中的一些ID。 矩阵可能包含在数据框中找不到的额外 ID。

    [A][B][C][D]  
[A] value1 value2 value3 value4
[B] value5 value6 value7 value8 
[C] value9 value10 value11 value12
[D] value13 value14 value15 value16

我希望矩阵行名和列名与数据框中的 ID 列完全匹配。

矩阵应该是(例如):注意 D 是如何不出现的,因为数据框中缺少 D。

   [A][B][C]  
[A] value1 value2 value3 value4
[B] value9 value10 value11 value12
[C] value13 value14 value15 value16

使用下面命令的问题是它只是过滤行,如果在数据框中找不到,我需要删除列和行,所以矩阵仍然是一个正方形。 最终矩阵的行名和列名应与数据框中的 ID 列完全匹配。

matrix <- matrix[row.names(matrix)%in%dataframe$ID,]

行名必须 = 矩阵的列名,因此是一个正方形。 这一定是真的:

identical(rownames(matrix),colnames(matrix))

使用match两次。

df1 <- data.frame(ID = LETTERS[1:3])
mat <- matrix(1:16, ncol = 4, dimnames = list(LETTERS[1:4], LETTERS[1:4]))

i_row <- match(df1$ID, rownames(mat))
i_col <- match(df1$ID, colnames(mat))
mat[i_row, i_col]
#>   A B  C
#> A 1 5  9
#> B 2 6 10
#> C 3 7 11

创建于 2022-12-20,使用reprex v2.0.2

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM