0

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

4

2 回答 2

0

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

new.meta = meta.data
new.meta[,which(new.meta[,"colposition"] == FALSE)] = NULL
于 2020-05-10T14:53:28.527 回答
0

您添加!以获得布尔值的补码,下面是一个示例,它丢弃了样本中的前 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
于 2020-05-10T17:30:46.427 回答