基于单元格值的子集矩阵

subset matrix based on cell values

这应该很简单,但我想不通:

我有一个方阵,每个单元格中都有整数值(所有与所有距离计算的结果)。我想根据单元格值对矩阵进行子集化,例如cell == 8 或 cell <= 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

输出:

结构(c(0, 999, 999, 8, 999, 999, 0, 999, 999, 999, 999, 999, 0, 999, 6, 8, 999, 999, 0, 999, 999, 999, 6, 999, 0), .Dim = c(5L, 5L), .Dimnames = list(c("CASSLLAGAPEQFF", "CASSQVGLATGTQYF", "CASSSGTQYTQYF", "CASRITSGGKTQYF", "CATSDSRGKTQYF"), c("CASSLLAGAPEQFF", "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 对每一列执行相同的操作。