虽然我的问题似乎很容易,但我现在已经有一段时间了.我有一个包含P值的对称矩阵.现在我想从矩阵中删除所有不包含超过确定阈值的值的行/列.
示例矩阵:
test <- c(1.0000000000, 0.001996328, 0.000176308, 0.0002305861, 0.1514324000,
0.0019963281, 1.000000000, 0.007106454, 0.409054300, 0.001210349,
0.0001763080, 0.007106454, 1.000000000, 0.217609400, 0.185434400,
0.0002305861, 0.409054269, 0.217609401, 1.000000, 1.972118e-09,
0.1514324468, 0.001210349, 0.185434396, 1.972118e-09, 1.000000)
m <- matrix(test, nrow=5, ncol=5)
genes <- c("geneA", "geneB", "geneC", "geneD", "geneE")
rownames(m) <- genes
colnames(m) <- genes
m
Run Code Online (Sandbox Code Playgroud)
这将导致:
geneA geneB geneC geneD geneE
geneA 1.0000000000 0.001996328 0.000176308 2.305861e-04 1.514324e-01
geneB 0.0019963280 1.000000000 0.007106454 4.090543e-01 1.210349e-03
geneC 0.0001763080 0.007106454 1.000000000 2.176094e-01 1.854344e-01
geneD 0.0002305861 0.409054300 0.217609400 1.000000e+00 1.972118e-09
geneE 0.1514324000 0.001210349 0.185434400 1.972118e-09 1.000000e+00
Run Code Online (Sandbox Code Playgroud)
现在我想删除所有不包含介于-0.001和0.001之间的值的行/列.所以在这个样本矩阵中,行和列"基因B"应该被删除.
我尝试过的一些代码片段如下所示:
test <- finalPScore[(abs(finalPScore[]) < 0.001)]
Run Code Online (Sandbox Code Playgroud)
但是"test"是一个数字,包含实际数字.
test <- finalPScore[(abs(finalPScore[]) < 0.001),(abs(finalPScore[]) < 0.001)]
Run Code Online (Sandbox Code Playgroud)
错误信息:"(下标)逻辑下标太长"我也通过名称尝试了一种方法:
test <- (abs(finalPScore[]) < 0.001)
for(i in colnames(test)) { if(test[,i] == 1) { print( i ) } }
Run Code Online (Sandbox Code Playgroud)
但是它只检查每列的第一行......
blub <- rownames(finalPScore[abs(finalPScore[]) < 0.001])
Run Code Online (Sandbox Code Playgroud)
根本不起作用.
无论如何,在我看来,我错过了一些非常简单而又重要的东西.你能帮帮我吗?
PS:R是必须的,因为我之前正在进行分析,之后会进行分析.此外,原始矩阵太大,无法暂时导出/写入.
这是我对此的看法.该行找到我们要保留的列(行):
keep = (colSums(abs(m) < 0.001) > 0)
Run Code Online (Sandbox Code Playgroud)
检查结果:
genes[keep]
m[keep,keep]
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
735 次 |
最近记录: |