簡體   English   中英

用Wlidcard分組成對矩陣

[英]Subsetting a pairwise matrix with wlidcard

我想將大的成對矩陣的一部分子集化為較小的矩陣。 例如

    TF1 TF2 TF3 TG1 TG2 TG3
TF1 0    2   1  450 460 450
TF2 2    0   1  452 462 462
TF3 1    2   0  451 461 451
TG1 450 452 450 0   2   0
TG2 460 462 462 2   0   1
TG3 450 452 451 1   2   0

如果我輸入了確切的列名和行名“ TF1”等,則可以進行子集設置,但是我想要所有的TF。

我認為這可能是grep,但我無法在論壇中的任何地方放置grep:

TF <-T_PW[c("TF1","TF2","TF3"),c("TF1","TF2","TF3")]

這是預期的輸出矩陣:

    TF2 TF3 TF1   
TF1 0   2   1
TF2 2   0   1
TF3 1   2   0

是因為因為它是成對的,所以列和行才有名稱?

謝謝

grep返回與提供的正則表達式匹配的輸入索引:

> grep('^TF', rownames(T_PW))
[1] 1 2 3

> grep('^TF', colnames(T_PW))
[1] 1 2 3

因此,您可以將grep內部[]到子集rownamescolnames矩陣:

TF = T_PW[grep('^TF', rownames(T_PW)), grep('^TF', colnames(T_PW))]

由於rownames是對稱的colnames ,你也可以做這樣的事情:

TF_names = grep('^TF', colnames(T_PW))

T_PW[TF_names, TF_names]

結果:

    TF1 TF2 TF3
TF1   0   2   1
TF2   2   0   1
TF3   1   2   0

數據:

T_PW = read.table(text="    TF1 TF2 TF3 TG1 TG2 TG3
TF1 0    2   1  450 460 450
                 TF2 2    0   1  452 462 462
                 TF3 1    2   0  451 461 451
                 TG1 450 452 450 0   2   0
                 TG2 460 462 462 2   0   1
                 TG3 450 452 451 1   2   0", header = TRUE, row.names=1)

T_PW = as.matrix(T_PW)

暫無
暫無

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

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