![](/img/trans.png)
[英]Subset matrix based on cell values and drop rows/columns which don't satisfy a criterion
[英]subset matrix based on cell values
这应该很简单,但是我无法弄清楚:
我在每个单元格中都有一个带有整数值的方阵(所有与所有距离计算的结果)。 我想基于单元格值(例如,单元格== 8或单元格<= 6等)对矩阵进行子集化。
foo[1:5, 1:5]
CASSLLAGAPEQFF CASSQVGLATGTQYF CASSSGTQYTQYF CASRITSGGKTQYF CATSDSRGKTQYF
CASSLLAGAPEQFF 0 999 999 8 999
CASSQVGLATGTQYF 999 0 999 999 999
CASSSGTQYTQYF 999 999 0 999 6
CASRITSGGKTQYF 8 999 999 0 999
CATSDSRGKTQYF 999 999 6 999 0
dput:
结构(c(0,999,999,8,999,999,0,999,999,999,999,999,0,999,6,8,8,999,999,0,999,999,999,6, 999,0),.Dim = c(5L,5L),.Dimnames = list(c(“ CASSLLAGAPEQFF”,“ CASSQVGLATGTQYF”,“ CASSSGTQYTQYF”,“ CASRITSGGKTQYF”,“ CATSDSRGKTQYF”),c(“ CASSLLAGA CASSQVGLATGTQYF”,“ CASSSGTQYTQYF”,“ CASRITSGGKTQYF”,“ CATSDSRGKTQYF”)))
单元格== 8的预期结果将是2x2的矩阵
CASSLLAGAPEQFF CASRITSGGKTQYF
CASSLLAGAPEQFF 0 8
CASRITSGGKTQYF 8 0
行和列的名称与子设置无关(但我想保留名称)。 最简单的方法是什么?
谢谢你的帮助!
您可以将==8
替换为任何其他过滤条件。
foo[rowSums(foo==8)>0,colSums(foo==8)>0]
# CASSLLAGAPEQFF CASRITSGGKTQYF
#CASSLLAGAPEQFF 0 8
#CASRITSGGKTQYF 8 0
rowSums(foo==8)>0
查找至少foo==8
一个元素为TRUE
任何行。 colSums(foo==8)>0
对每一列都执行相同的操作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.