【问题标题】:Subset a complex sparse matrix based on a logical column基于逻辑列对复杂稀疏矩阵进行子集化
【发布时间】:2020-05-10 14:37:48
【问题描述】:

我正在使用 Seurat 对象,在进行一些质量控制后,我有一个名为 discard 的元数据列,其中包含 TRUEFALSE,这取决于相关行是否未通过 QC 并应被删除。我该怎么做呢?我已经尝试了subset 的所有不同风格,我可以找到文档,但唯一没有给我错误的方法是subset(object, object@meta.data$discard),它给了我一个只有应该丢弃的行的矩阵! subset(object, subset!=object@meta.data$discard) 显然不可能使用这种类型的对象。我怎么能做到这一点而不迭代制作一个称为“保持”或同样荒谬的逆 QC?任何帮助都将不胜感激!

【问题讨论】:

  • 请添加一些数据,以便我们一起解决。

标签: r seurat


【解决方案1】:

您添加 ! 以获得布尔值的补码,下面是一个示例,它丢弃了样本中的前 10 列,即第 10 列。

对于样本,您可以像矩阵一样对其进行子集化:

library(Seurat)
# we use a example dataset
dim(pbmc_small)
[1] 230  80

pbmc_small@meta.data$discard = rep(c(TRUE,FALSE),c(10,70))
newdata = pbmc_small[,!pbmc_small@meta.data$discard]

dim(newdata)
[1] 230  70

table(colnames(pbmc_small)[1:10] %in% colnames(newdata))

FALSE 
   10

否则,您也可以使用名称进行子集化:

id_keep = colnames(pbmc_small)[!pbmc_small@meta.data$discard]
newdata = subset(pbmc_small,cells=id_keep)
dim(newdata)
[1] 230  70

【讨论】:

    【解决方案2】:

    那么,您要永久删除 FALSE 数据吗?如果是这样,我认为快速的逻辑测试可以工作。

    new.meta = meta.data
    new.meta[,which(new.meta[,"colposition"] == FALSE)] = NULL
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-07-02
      • 2015-01-30
      • 2016-06-25
      • 2017-06-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多