在一个单元格(定界字符串)中选择最小值或最大值

DN1

我有一个数据框,其中每个样本的列可以具有多个值,例如:

Gene       Pvalue1             Pvalue2              Pvalue3                  Beta
Ace    0.0381, ., 0.00357    0.01755, 0.001385    0.0037, NA , 0.039         -0.03,1,15
NOS          NA                  0.02              0.001, 0.00067              0.00009,25,30

我想申请min(),并max()在每列每个基因的(我有成千上万个基因的总数),并得到了p值的最小值但如公测列的最大值。因此,输出数据如下所示:

Gene       Pvalue1             Pvalue2              Pvalue3                  Beta
Ace        0.00357              0.001385             0.0037                   15
NOS          NA                  0.02                0.00067                  30

我是R的新手,不知道我要问的内容是否可能,如果一个单元格中有多个值,它们是否被视为字符串?

丹尼斯

使用stringr的可能解决方案dplyr

library(dplyr)
library(stringr)

getmin = function(col) str_extract_all(col,"[0-9\\.-]+") %>%
  lapply(.,function(x) min(as.numeric(x),na.rm = T) ) %>%
  unlist() 

df %>%
  mutate_at(names(df)[-1],getmin)

  Gene Pvalue1  Pvalue2 Pvalue3  Beta
1  Ace 0.00357 0.001385 0.00370 -3e-02
2  NOS     Inf 0.020000 0.00067 9e-05

Warning messages:
1: In FUN(X[[i]], ...) : NAs introduced by coercion
2: In min(as.numeric(x), na.rm = T) :
  no non-missing arguments to min; returning Inf

该函数使用以下命令getmin提取数字str_extract_all

 str_extract_all(df$Pvalue2,"[0-9\\.-]+")

[[1]]
[1] "0.01755"  "0.001385"

[[2]]
[1] "0.02"

它具有对空格或其他字符不敏感的优点,但只能提取一个点。然后,我遍历此列表以提取每个单元格中的最小值,然后使用将该列表转换为向量unlist使用该as.numeric()函数将可能的提取结果转换.NA

代码df %>% mutate_at(names(df)[-1],getmin)只在第一个列以外的所有列上应用此功能


编辑:如果要避免使用inf值,可以使用此稍作修改的版本:

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() 

df %>%
    mutate_at(names(df)[-1],getmin)

  Gene Pvalue1  Pvalue2 Pvalue3  Beta
1  Ace 0.00357 0.001385 0.00370 -3e-02
2  NOS      NA 0.020000 0.00067 9e-05

数据:

df <- read.table(text = "
                 Gene       Pvalue1             Pvalue2              Pvalue3                  Beta
Ace    0.0381,.,0.00357    0.01755,0.001385    0.0037,NA,0.039         -0.03,1,15
                 NOS          NA                  0.02              0.001,0.00067              0.00009,25,30
                 ",header = T)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在整个Oracle表中选择一个最大值或最小值

选择 col 值,其中另一个 col 是最大值或最小值

如果我有一个表显示不同的值,并且有一个显示最小值/最大值的公式,那么有没有办法显示相应的单元格?

获取一组字符串中的最大值和最小值

在 Python 中查找 Pandas 的每个单元格中的最大值/最小值

用于获取数字由 + 分隔的单元格中的最大值或最小值的公式

MySQL从最大值中选择最小值

MySQL在两个(或多个)给定值中选择最小值/最大值

如何根据另一个单元格将单元格值限制为最大值?

在最大值旁边找到一个单元格的值

将最大值返回到包含给定字符串的单元格的左侧

Excel VBA 在相邻单元格中查找具有最大值的字符串

如何从1个字段为最大值或最小值的表中选择行?

字符串在一个单元格中搜索多个值

如何在光滑的同一查询中选择最大值,最小值

数组的总和,而忽略一个最小值和一个最大值

熊猫,从一列中选择最大值,从另一列中选择最小值

谷歌表,如果字符串匹配,并且是单元格集合中的最后一个匹配字符串,则获取单元格嵌套的值

我如何从字符串中获取最大值和最小值

从字符串数组中获取最大值/最小值(javascript)

在Javascript中获取字符串数组的最小值和最大值

BrentSearch从字符串输入中查找根,最小值和最大值

从另一个单元格(VBA)的字符串中删除一个单元格中的值

同一行中一个单元格的值与另一行中的最大值

在单元格值字符串的长度为1的行中查找最后一个值

Excel VBA根据对应范围的最小值到最大值查找范围内的单元格地址

具有数据栏和固定的最小值/最大值的单个单元格

Excel从已计算行号的单元格中选择一个值

如何在Excel中选择包含相同值的最后一个单元格