【发布时间】:2018-11-12 02:07:56
【问题描述】:
我正在处理一个转录组学项目,我有一个数据框,其中包含“SampleIDs”、“hugo_name”和“Expression”列。由于每个样本的基因名称很多,DF 有数千行。我正在尝试使用一组 10 个管家基因进行 QC 步骤,其中我消除了所有“样本 ID”,其中少于 9/10 的管家基因在截止值以上表达。基本上,我想获取 DF$hugo_name 中与 10 个基因列表匹配的所有基因,并且对于每个基因名称,检查其表达值以确保它高于我的截止值列表。
我的数据框包含 10 个管家基因和较低的截止表达值:
EHK_list <- c("C1orf43", "CHMP2A", "GPI", "PSMB2", "PSMB4", "RAB7A", "REEP5", "SNRPD3", "VCP", "VPS29")
EHK_minimum <- data_frame("hugo_name" = EHK_list, "expression" = c(2.3697, 3.4964, 2.0620, 2.1240, 4.3081, 8.3988, 1.4969, -0.0066, 2.5436, 5.2886))
show(EHK_minimum)
<chr> <dbl>
1 C1orf43 2.37
2 CHMP2A 3.50
3 GPI 2.06
4 PSMB2 2.12
5 PSMB4 4.31
6 RAB7A 8.40
7 REEP5 1.50
8 SNRPD3 -0.0066
9 VCP 2.54
10 VPS29 5.29
包含我所有数据的大型 DF 采用以下形式:
Sample_ID hugo_name Expression
Sample_1 SNRPD3 6669.0
Sample_1 ABCDEF 400.2
..
..
Sample_2 RAB7A 1.75
Sample_2 ZYXVU 9.4
我可以将我的 DF 子集到 EHK_list 上的基因中:
QC_geneSubset <- DF[DF$hugo_name %in% EHK_list,]
sample_ID hugo_name expression
1: Sample1 RAB7A 1382.78
2: Sample1 C1orf43 11.78
3: Sample1 CHMP2A 75.5
.
.
11: Sample2 RAB7A 33.3
12: Sample2 C1orf43 12.1
13: Sample2 CHMP2A 1500
.
.
21: Sample3 RAB7A 66
22: Sample3 C1orf43 1
23: Sample3 CHMP2A 19
.
.
但我不知道如何只保留来自 DF 的行,其中 DF “hugo_name”(即基因名称)与 EHK_list 上的匹配,并且 DF 表达式值 >= EHK_minimum 数据帧的截止值.也就是说,我想匹配元组 (hugo_name, expression) 并确保样本的表达式值高于列表中我列出的 >=9/10 基因的截止值。有什么想法吗?
【问题讨论】:
-
使用
dplyr你可以做到filter(df, hugo_name %in% EHK_list) %>% mutate(flag = ifelse(expression> threshold, "greater", "smaller"))。这应该让你足够接近你想去的地方。您可能需要加入您的数据和阈值 -
你能提供一个小的
dput你的真实数据或QC_geneSubset吗?