我有一个遗传数据集,其中每一行都描述一个基因,并且有一个带有多个beta值的beta列,我已将它们压缩成一行/单元格(来自一个基因中的多个变体产生多个beta的变体级别)。 β是基因在一定条件下可能具有的效应大小,因此大的负值和大的正值都很重要。我正在尝试编写从行中选择绝对值的代码,然后尝试创建另一个新列来记录该绝对值是否曾经是负值-我有生物学背景,所以不确定是否可能最好的方法吗?
例如,我的数据如下:
Gene Beta
ACE 0.01, -0.6, 0.4
BRCA 0.7, -0.2, 0.2
ZAP70 NA
P53 0.8, -0.6, 0.001
预期的输出是这样的(选择绝对值并跟踪哪个数字为负):
Gene Beta Negatives
ACE 0.6 1
BRCA 0.7 0
ZAP70 NA NA
P53 0.8 0
我目前坚持从每一行获取绝对值,我正在尝试的是这样:
abs2 = function(x) if(all(is.na(x))) NA else abs(x,na.rm = T)
getabs = function(col) str_extract_all(col,"[0-9\\.-]+") %>%
lapply(.,function(x)abs2(as.numeric(x)) ) %>%
unlist()
test <- df %>%
mutate_at(names(df)[2],getabs)
#Outputs:
Error in abs(x, na.rm = T) : 2 arguments passed to 'abs' which requires 1
任何关于如何获取每个单元格/行绝对值的帮助,我都可以使一列获得最大的负值,将其匹配为相同的绝对值,并将其用作我的负值记录。] >
输入数据:
dput(df)
structure(list(Gene = c("ACE", "BRCA", "ZAP70", "P53"), `Beta` = 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"))
[我有一个遗传数据集,其中每一行都描述一个基因,并且有一个带有多个beta值的beta列,我已将这些beta值压缩到一行/单元格中(从一个基因中有多个变体的变体水平开始……