首页 > 解决方案 > 在一个单元格中选择最小值或最大值(分隔字符串)

问题描述

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

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()基因的数据(我总共有数千个基因),并获得 pvalues 的最小值,但对于 beta 等列的最大值。所以输出数据看起来像这样:

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

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

标签: rdataframemaxmin

解决方案


Another option is using and :

library(data.table)
library(matrixStats)

pval_cols <- grep("Pvalue", names(DT), fixed = TRUE, value = TRUE)

min_fun <- function(x) {
  y <- tstrsplit(x, split = ",", fixed = TRUE)
  y <- rowMins(sapply(y, as.numeric), na.rm = TRUE)
  y <- replace(y, !is.finite(y), NA)
  return(y)
}

DT[, (pval_cols) := lapply(.SD, min_fun)
   , .SDcols = pval_cols][]

which gives:

> DT
   Gene Pvalue1  Pvalue2 Pvalue3          Beta
1:  Ace 0.00357 0.001385 0.00370    -0.03,1,15
2:  NOS      NA 0.020000 0.00067 0.00009,25,30

For the Beta-column(s) you can create a similar max_fun: just replace rowMins with rowMaxs.


推荐阅读