![](/img/trans.png)
[英]Subsetting data through a pairwise condition (coordinates) given through another matrix
[英]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
內部[]
到子集rownames
和colnames
矩陣:
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.