【发布时间】:2021-01-18 20:13:54
【问题描述】:
我试图了解如何根据一个数字列中的值从表中提取前十行,但仅从满足应用于第二个数字列的条件的行中提取。
先说一下数据。我有一个表格,列出了几千个人类基因的表达差异(log_fold_change)和这种差异的 p 值(p_value)。该表如下所示:
log_fold_change p_value
APOD 1.7388209 0.4820801
S100B -1.1514299 0.5995658
CD63 0.6066951 0.4935413
PMEL -1.4977796 0.1862176
MT2A -0.9311173 0.8273733
S100A6 -0.4555436 0.6684667
TIMP1 -1.9464387 0.7942399
VIM -0.4704482 0.1079436
PAEP 1.4787634 0.7237109
CSTB -0.6386040 0.4112744
可以使用这些命令重新创建数据(创建一个包含n 虚构基因数据的表):
n <- 50
log_fold_change <- runif(n, -2.0, 2.0)
p_value <- runif(n, 0, 1.0)
df <- data.frame(log_fold_change, p_value)
rownames(df) <- stringi::stri_paste(stringi::stri_rand_strings(n, 3, '[A-Z]'),stringi::stri_rand_strings(n, 1, '[1-9]'))
我为标签创建了一个列 (df$label <- NA),我计划在其中传输我在绘制图表时想要标记的基因名称。你问哪个基因?我希望在log_fold_change 为阳性的基因中,提取出p_value 最小的十个基因。
我已经找到了一种方法来提取和标记最小p_value的10个基因:
df$label[with(df, rank(p_value)) %in% c(1:10)] <- rownames(df)[with(df, rank(p_value)) %in% c(1:10)]
现在,我如何强制执行条件df$log_fold_change > 0,以便我的十个具有最小p_value 的基因仅从具有阳性log_fold_change 的基因中选出?任何帮助将不胜感激!
【问题讨论】:
标签: r dataframe conditional-statements rank