我有一个包含 2 列和约 60000 行的基因表达计数数据集。每列是一个样本,每行是一个由 ensembl ID 表示的基因。我需要通过数据减少或子集以仅包括蛋白质编码的基因。这是我想要实现的小规模示例:
这是我的名为 BDC
的数据集,其中包含各种类型基因的集合 ID 以及每个样本的计数数据:
ENSEMBL Sample A Sample B
ENSG00000198888 10 2
ENSG00000210082 3 13
ENSG00000198763 6 18
ENSG00000198886 12 11
我还有一个名为 ProtCod
的 ensembl ID 列表,其中包含我知道是蛋白质编码的基因:
ENSEMBL_Protein_Coding
ENSG00000198888
ENSG00000198763
所以我想对我的数据集进行子集化,以仅包含具有蛋白质编码集合 ID 的行并排除所有其他行:
ENSEMBL Sample A Sample B
ENSG00000198888 10 2
ENSG00000198763 6 18
但我需要大规模地实现这一目标,将我的数据集从约 60000 行或基因减少到约 20000 行。
这是我迄今为止尝试过的:
BDCProtCod <- BDC[!row.names(BDC) %in% ProtCod, ]
BDCProtCod
dim(BDCProtCod)
[1] 60675 2
维度与我原来的 BDC
数据集相同,为什么这段代码不排除不包含来自 ProtCod
的名称的行?
我也试过:
BDCProtCod <- BDC[unlist(ProtCod), ]
BDCProtCod
dim(BDCProtCod)
[1] 19603 2
这实际上排除了我想要排除的行,但它将所有内容都设置为“NA”。
答案 0 :(得分:1)
你已经删除了你之前的帖子,因为我正在写答案。
似乎 ID 在 ENSEMBL
中存储为 BDC
,在 ENSEMBL_Protein_Coding
中存储为 ProtCod
,因此要将它们作为向量存储,您应该将它们称为 {{1} } 和 BDC$ENSEMBL
分别
ProtCod$ENSEMBL_Protein_Coding
数据:
BDC[BDC$ENSEMBL %in% ProtCod$ENSEMBL_Protein_Coding, ]
ENSEMBL SampleA SampleB
<chr> <dbl> <dbl>
1 ENSG00000198888 10 2
2 ENSG00000198763 6 18