如何获得绝对值,同时注意R中的数字以前是否为负?

问题描述 投票:0回答:1

我有一个遗传数据集,其中每一行都描述一个基因,并且有一个带有多个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值压缩到一行/单元格中(从一个基因中有多个变体的变体水平开始……

r dplyr bioinformatics absolute-value
1个回答
0
投票
您可以简单地拆分,转换为数值,找到绝对最大值的索引并检查它是否为负,即
© www.soinside.com 2019 - 2024. All rights reserved.