基于单元格值的子集矩阵

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() 中使用逻辑

以上是关于基于单元格值的子集矩阵的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Pandas 在 Python 中基于同一行中的另一个单元格设置单元格值

如何基于单个单元格值格式化整个列?

使用单元格的位置替换单元格值

基于另一个单元格值的条件格式

(Excel) 基于相邻单元格值的条件格式

基于单元格值的自动填充线