这应该很简单,但我无法弄清楚:
我有一个方形矩阵,每个单元格中有一个整数值(全部与全部距离计算的结果)。我想基于单元格值对矩阵进行子集化,例如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将是 行名和列名对子集来说并不重要(但我想保留名称)。最简单的方法是什么? 感谢您的帮助! CASSLLAGAPEQFF CASRITSGGKTQYF
CASSLLAGAPEQFF 0 8
CASRITSGGKTQYF 8 0
答案 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
对每列都做同样的事情。