我想将大的成对矩阵的一部分子集化为更小的矩阵。 e.g。
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放在我的论坛中的任何地方:
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
是因为它是成对的,所以列和行都有名称吗?
谢谢
答案 0 :(得分: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)