簡體   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