基于单元格值的子集矩阵
Posted
技术标签:
【中文标题】基于单元格值的子集矩阵【英文标题】:subset matrix based on cell values 【发布时间】:2016-02-23 06:16:34 【问题描述】:这应该很简单,但我想不通:
我在每个单元格中都有一个带有整数值的方阵(全部与全部距离计算的结果)。我想根据单元格值对矩阵进行子集化,例如单元格 == 8,或单元格
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("CASSSLLAGAPEQFF", “CASSQVGLATGTQYF”、“CASSSGTQYTQYF”、“CASRITSGGKTQYF”、“CATSDSRGKTQYF” )))
单元格 == 8 的预期结果将是一个 2x2 矩阵
CASSLLAGAPEQFF CASRITSGGKTQYF
CASSLLAGAPEQFF 0 8
CASRITSGGKTQYF 8 0
行名和列名与子集无关(但我想保留名称)。最直接的方法是什么?
感谢您的帮助!
【问题讨论】:
请使用dput
展示您所拥有的一个小例子。当你说“所有与所有距离计算”时,你的意思是你已经使用了dist
,现在有一个类 dist 的对象?
我使用 stringdistmatrix() 来创建这个对象。
请将dput(foo[1:5, 1:5])
添加到问题中并显示预期结果。
【参考方案1】:
您可以将==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
对每一列执行相同的操作。
【讨论】:
谢谢,这对我需要做的事情有用。我忘记在 rowSums() 中使用逻辑以上是关于基于单元格值的子集矩阵的主要内容,如果未能解决你的问题,请参考以下文章