根据逻辑列子集复杂的稀疏矩阵

时间:2020-05-10 14:37:48

标签: r seurat

我正在使用Seurat对象,在进行了一些质量控制之后,根据所涉及的行是否失败,我有一列名为discard的元数据列,其中包含TRUEFALSE质量控制,应删除。我该怎么做呢?我已经尝试了subset的所有不同风格,可以找到文档,但是唯一没有出错的方法是subset(object, object@meta.data$discard),它为我提供了仅应丢弃的行的矩阵!! subset(object, subset!=object@meta.data$discard)对于这种类型的对象显然是不可能的。如何在不重复进行称为“保持”或同样可笑的反向QC的情况下做到这一点?任何帮助表示感谢!

2 个答案:

答案 0 :(得分:0)

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

fecha_esperada_parto

答案 1 :(得分:0)

您添加!来获取布尔值的补码,下面的示例丢弃了示例中的前10列,即第1 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