繁体   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