基于单元格值的子集矩阵

时间:2015-11-20 16:59:22

标签: r matrix subset

这应该很简单,但我无法弄清楚:

我有一个方形矩阵,每个单元格中有一个整数值(全部与全部距离计算的结果)。我想基于单元格值对矩阵进行子集化,例如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

dput:

结构(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

行名和列名对子集来说并不重要(但我想保留名称)。最简单的方法是什么?

感谢您的帮助!

1 个答案:

答案 0 :(得分: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对每列都做同样的事情。