【发布时间】:2020-06-22 06:49:33
【问题描述】:
我有一个遗传数据集,其中每一行描述一个基因,并且有一个包含多个 beta 值的 beta 列,我已将其压缩到一个行/单元格中(从一个基因中的多个变体给出多个 beta 的变体级别)。 β 是基因在某种条件下可能产生的影响大小,因此大的负值和大的正值一样重要。我正在尝试编写代码来选择基因的最大负或最大正 beta 值,在 -0.5 和 0.5 处截断。
我要编写的规则如下:
如果一个基因/行的值小于 -0.5 且没有值高于 0.5,则只保留最大的负值。
如果它有一个大于 0.5 的值并且没有小于 -0.5 的值,则只保留最大的正值。
如果没有小于 -0.5 或大于 0.5 的值,则保留最大值。
如果它的两个值都小于 -0.5 和大于 0.5,则保留最大值。
例如我的数据如下所示:
Gene Beta(s)
ACE 0.01, -0.6, 0.4
BRCA 0.7, -0.2, 0.2
ZAP70 0.001, 0.02, -0.003
P53 0.8, -0.6, 0.001
预期输出(根据设定条件选择最大的负值或正值):
Gene Beta(s)
ACE -0.6
BRCA 0.7
ZAP70 0.02
P53 0.8
我来自生物学背景,刚接触 R,所以不知道如何编码。目前我正在使用函数来选择基因的最大或最小 beta 值,但我不知道如何在进一步的条件下修改它:
max2 = function(x) if(all(is.na(x))) NA else max(x,na.rm = T)
getmax = function(col) str_extract_all(col,"[0-9\\.-]+") %>%
lapply(.,function(x)max2(as.numeric(x)) ) %>%
unlist()
min2 = function(x) if(all(is.na(x))) NA else min(x,na.rm = T)
getmin = function(col) str_extract_all(col,"[0-9\\.-]+") %>%
lapply(.,function(x)min2(as.numeric(x)) ) %>%
unlist()
test <- df %>%
mutate_at(names(df)[2],getmax)
对于如何设置多个条件语句的正确方向的任何帮助,我们将不胜感激。
示例数据:
dput(df)
structure(list(Gene = c("ACE", "BRCA", "ZAP70", "P53"), `Beta(s)` = c("0.01, -0.6, 0.4",
"0.7, -0.2, 0.2", "0.001, 0.02, -0.003", "0.8, -0.6, 0.001")), row.names = c(NA,
-4L), class = c("data.table", "data.frame"))
【问题讨论】:
-
所以它们都是根据最小值和最大值分组的(针对-0.5和+0.5)?
标签: r dplyr conditional-statements bioinformatics