簡體   English   中英

匹配相關矩陣的行名和列名

[英]match rownames and colnames of correlation matrix

我有一個包含 3990 個名稱的向量(這些是我的數據框的列名),我想將它們與我的數據行匹配。 我的數據包含相關值,我想根據找到的匹配項對我的數據進行子集化

我的數據如下所示: 在此處輸入圖像描述

我嘗試使用 grepl

result <- filter(df, grepl(paste(column_names, collapse="|"), rownames(df)))

但我得到一個錯誤

“grepl()”中的錯誤:! 無效的正則表達式

我預期的 output 將是

在此處輸入圖像描述

有沒有人對如何做到這一點有任何建議?

如果有人可以幫助我,那就太好了!

最好的,Shweta

嘗試這個:

library(dplyr)
dat %>%
  filter(grepl(paste0("\\b", names(.), "\\b", collapse="|"), rownames(dat)))
          TATA TATB TATC TATD
TATA,TATA  0.8  0.2  0.5  0.1
TATB       0.2  0.9  0.4  0.5
TATA       0.9  0.4  0.2  0.1

數據:

dat <- data.frame(TATA = c(0.8,0.2,0.1,0.01,0.9),
                  TATB = c(0.2,0.9,0.2,0.4,0.4),
                  TATC = c(0.5,0.4,0.3,0.3,0.2),
                  TATD = c(0.1,0.5,0.15,0.5,0.1),
                  row.names = c("TATA,TATA", "TATB", "TATE", "TATM", "TATA"))

您可以嘗試三個選項:

library(reshape2)
melt(as.matrix(dat)
data.frame(rows=rownames(dat)[row(dat)], vars=colnames(dat)[col(dat)], values=c(dat))
as.data.frame(as.table(as.matrix(dat)))

結果:

        Var1 Var2        Freq
1  TATA,TATA TATA 0.872624483
2       TATB TATA 0.533790730
3       TATE TATA 0.110495616
4       TATM TATA 0.253893718
5       TATA TATA 0.303576730
6  TATA,TATA TATB 0.774815753
7       TATB TATB 0.941361633
8       TATE TATB 0.305219935
9       TATM TATB 0.101124692
10      TATA TATB 0.968514156
11 TATA,TATA TATC 0.891697937
12      TATB TATC 0.006223573
13      TATE TATC 0.045138657
14      TATM TATC 0.848485971
15      TATA TATC 0.995542845
16 TATA,TATA TATD 0.479559761
17      TATB TATD 0.981808763
18      TATE TATD 0.227518091
19      TATM TATD 0.767491049
20      TATA TATD 0.410935185

數據:

dat <- data.frame(TATA = runif(5),
                  TATB = runif(5),
                  TATC = runif(5),
                  TATD = runif(5),
                  row.names = c("TATA,TATA", "TATB", "TATE", "TATM", "TATA"))

編輯:

作為第一步,使用正則表達式匹配對輸入數據進行子集化:

cols <- grep(pattern = paste0(rownames(dat), collapse = "|"), x = colnames(dat), value = TRUE)
rows <- grep(pattern = paste0(colnames(dat), collapse = "|"), x = rownames(dat), value = TRUE)

dat2 <- dat[rownames(dat) %in% rows, colnames(dat) %in% cols]

產量:

as.data.frame(as.table(as.matrix(dat2)))
       Var1 Var2      Freq
1 TATA,TATA TATA 0.6908219
2      TATB TATA 0.7255142
3      TATA TATA 0.1022963
4 TATA,TATA TATB 0.7291625
5      TATB TATB 0.7420069
6      TATA TATB 0.7480157

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM