基于逻辑列对复杂的稀疏矩阵进行子集化
Subset a complex sparse matrix based on a logical column
我正在使用 Seurat 对象,在进行一些质量控制后,我有一个名为 discard
的元数据列,其中包含 TRUE
或 FALSE
,具体取决于行是否在问题未通过 QC,应删除。我该怎么做呢?我已经尝试了所有不同风格的 subset
我可以找到文档,但是唯一没有给我错误的方法是 subset(object, object@meta.data$discard)
它给了我一个只有应该丢弃的行的矩阵!! subset(object, subset!=object@meta.data$discard)
对于这种类型的对象显然是不可能的。我怎样才能做到这一点而不迭代来制作一个名为 "keep" 的逆 QC 或同样荒谬的东西?非常感谢任何帮助!
那么,您要永久删除 FALSE 数据吗?如果是的话,我想一个快速的逻辑测试可以工作。
new.meta = meta.data
new.meta[,which(new.meta[,"colposition"] == FALSE)] = NULL
您添加 !
以获得布尔值的补码,下面是一个示例,它丢弃了样本中的前 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
我正在使用 Seurat 对象,在进行一些质量控制后,我有一个名为 discard
的元数据列,其中包含 TRUE
或 FALSE
,具体取决于行是否在问题未通过 QC,应删除。我该怎么做呢?我已经尝试了所有不同风格的 subset
我可以找到文档,但是唯一没有给我错误的方法是 subset(object, object@meta.data$discard)
它给了我一个只有应该丢弃的行的矩阵!! subset(object, subset!=object@meta.data$discard)
对于这种类型的对象显然是不可能的。我怎样才能做到这一点而不迭代来制作一个名为 "keep" 的逆 QC 或同样荒谬的东西?非常感谢任何帮助!
那么,您要永久删除 FALSE 数据吗?如果是的话,我想一个快速的逻辑测试可以工作。
new.meta = meta.data
new.meta[,which(new.meta[,"colposition"] == FALSE)] = NULL
您添加 !
以获得布尔值的补码,下面是一个示例,它丢弃了样本中的前 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