【问题标题】: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])添加到问题中并显示预期结果。

标签: r matrix subset


【解决方案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() 中使用逻辑
猜你喜欢
  • 2014-12-08
  • 1970-01-01
  • 2018-07-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多