如何从数字字符中选择最大数值?

DN1

我有一个按Gene分组的数据集分组到每一行的一些值只是.,为了删除它们,所以每行和每列只保留几个数字字符。

为此编码:

#Group by Gene:
data <- setDT(df2)[, lapply(.SD, paste, collapse = ", "), by = Genes]

#Remove ., from anywhere in the dataframe
dat <- data.frame(lapply(data, function(x) {
  gsub("\\.,|\\.$|\\,$|(, .$)", "", x)
}))

删除之前.,和分组之后的数据Gene如下:

Gene    col1                     col2                  col3           col4
ACE     0.3, 0.4, 0.5, 0.5       .                      ., ., .        1, 1, 1, 1, 1
NOS2    ., .                     .                      ., ., ., .     0, 0, 0, 0, 0
BRCA1   .                                               ., .           1, 1, 1, 1, 1
HER2    .                        0.1, ., .,  0.2, 0.1   .              1, 1, 1, 1, 1

删除.,我的数据后看起来像:

Gene    col1                 col2               col3     col4
ACE     0.3, 0.4, 0.5, 0.5                               1, 1, 1, 1, 1
NOS2                                                     0, 0, 0, 0, 0
BRCA1                                                    1, 1, 1, 1, 1
HER2                         0.1,      0.2, 0.1          1, 1, 1, 1, 1

我现在正在尝试选择每行和每列的最小值或最大值。

预期示例输出:

Gene    col1                 col2            col3    col4
ACE     0.5                                           1
NOS2                                                  0
BRCA1                                                 1
HER2                          0.1                     1

#For col1 I need the max value per row (so for ACE 0.5 is selected)
#For col2 I need the min value per row

需要注意的是,我的实际数据是100列和20,000行-不同的列需要每个选定基因的最大值或最小值。

然而,随着我使用的代码,我只得到了预期的输出col4和我的其他列重复选择的值的两倍(我让我0.5, 0.50.1, 0.1我想不通为什么)。

我用来选择最小值/最大值的代码是:

#Max value per feature and row
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() 

#Min value per feature and row
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() 

data <- dt %>%
  mutate_at(names(dt)[2],getmax)

data <- dt %>%
  mutate_at(names(dt)[3],getmin)

data <- dt %>%
  mutate_at(names(dt)[4],getmax)

这些选择功能为什么不适用于我的所有列?所有列都是字符类。我也想知道我是否甚至需要删除.,,是否可以直接跳到选择每行和每列的最大/最小值?

输入数据示例:

structure(list(Gene = c("ACE", "NOS2", "BRCA1", "HER2"), col1 = c("0.3, 0.4, 0.5, 0.5", 
"", "", ""), col2 = c("", "", "", "  0.1,      0.2 0.,1"), col3 = c(NA, 
NA, NA, NA), col4 = c("                         1, 1, 1, 1, 1", 
"                                     0, 0, 0, 0, 0", "                                     1, 1, 1, 1, 1", 
"     1, 1, 1, 1, 1")), row.names = c(NA, -4L), class = c("data.table", 
"data.frame"))
ekoam

您可以使用type.convert并将其参数设置na.strings"."您可能还想使用该range功能一次拍摄最小和最大。

假设你data.table看起来像这样

> dt
    Gene               col1                 col2       col3          col4
1:   ACE 0.3, 0.4, 0.5, 0.5                    .    ., ., . 1, 1, 1, 1, 1
2:  NOS2               ., .                    . ., ., ., . 0, 0, 0, 0, 0
3: BRCA1                  .                            ., . 1, 1, 1, 1, 1
4:  HER2                  . 0.1, ., .,  0.2, 0.1          . 1, 1, 1, 1, 1

考虑这样的功能

library(data.table)
library(stringr)

get_range <- function(x) {
  x <- type.convert(str_split(x, ",\\s+", simplify = TRUE), na.strings = ".")
  x <- t(apply(x, 1L, function(i) {
    i <- i[!is.na(i)]
    if (length(i) < 1L) c(NA_real_, NA_real_) else range(i)
  }))
  dimnames(x)[[2L]] <- c("min", "max")
  x
}

那你就可以

dt[, c(Gene = .(Gene), lapply(.SD, get_range)), .SDcols = -"Gene"]

输出量

    Gene col1.min col1.max col2.min col2.max col3.min col3.max col4.min col4.max
1:   ACE      0.3      0.5       NA       NA       NA       NA        1        1
2:  NOS2       NA       NA       NA       NA       NA       NA        0        0
3: BRCA1       NA       NA       NA       NA       NA       NA        1        1
4:  HER2       NA       NA      0.1      0.2       NA       NA        1        1

请注意,Gene由于该函数get_range已经矢量化,因此无需这样做

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

从实体的数字字段中选择最大数量 (Dynamics CRM 2016)

来自分类Dev

使用正则表达式查找两个文字字符串之间的最大数字

来自分类Dev

如何检查stylelint中选择器的最大数量?

来自分类Dev

从每个外键的行中选择最大数据

来自分类Dev

通过缩进使选择中的最大数字居中对齐

来自分类Dev

如何从数字输入文件中找到最大数字

来自分类Dev

如何找到一个包含特定字符串和最大数字的对象?

来自分类Dev

MySQL类型字符选择最大数量

来自分类Dev

如何从php中的字符串中选择非数字字符

来自分类Dev

如何获得文件中的最大数字?

来自分类Dev

如何开始.div从div id到最大数字?

来自分类Dev

如何获得文件中的最大数字?

来自分类Dev

如何从用户输入中打印最大数字

来自分类Dev

如何找到不在列表中的最大数字?

来自分类Dev

VB-2008如何检索数组中具有最大数字后缀的字符串?

来自分类Dev

Python Pandas:使用浮点数和字符/字母从df获取单个最大数值

来自分类Dev

的Mysql | 如何从混合整数字符串中选择整数值?

来自分类Dev

返回数组中的最大数字

来自分类Dev

使用最大数量分割数字?

来自分类Dev

查找最大数字并加1

来自分类Dev

显示最大数量的数字

来自分类Dev

最大数量选择器

来自分类Dev

选择排序以查找未排序数组中的最大数字

来自分类Dev

在 MySQL 中按首字母选择最大数字组

来自分类Dev

如何在javascript中的许多字符串中选择数字字符串(仅包含数字的字符串)而忽略其余字符串?

来自分类Dev

如何创建获取4个数字并返回最大数字的max方法?

来自分类Dev

如何从一系列数字中获得最小和最大数字?

来自分类Dev

如何找出包含不同数字的许多文档中的最大数字

来自分类Dev

在 Postgres 列中插入最大数值

Related 相关文章

  1. 1

    从实体的数字字段中选择最大数量 (Dynamics CRM 2016)

  2. 2

    使用正则表达式查找两个文字字符串之间的最大数字

  3. 3

    如何检查stylelint中选择器的最大数量?

  4. 4

    从每个外键的行中选择最大数据

  5. 5

    通过缩进使选择中的最大数字居中对齐

  6. 6

    如何从数字输入文件中找到最大数字

  7. 7

    如何找到一个包含特定字符串和最大数字的对象?

  8. 8

    MySQL类型字符选择最大数量

  9. 9

    如何从php中的字符串中选择非数字字符

  10. 10

    如何获得文件中的最大数字?

  11. 11

    如何开始.div从div id到最大数字?

  12. 12

    如何获得文件中的最大数字?

  13. 13

    如何从用户输入中打印最大数字

  14. 14

    如何找到不在列表中的最大数字?

  15. 15

    VB-2008如何检索数组中具有最大数字后缀的字符串?

  16. 16

    Python Pandas:使用浮点数和字符/字母从df获取单个最大数值

  17. 17

    的Mysql | 如何从混合整数字符串中选择整数值?

  18. 18

    返回数组中的最大数字

  19. 19

    使用最大数量分割数字?

  20. 20

    查找最大数字并加1

  21. 21

    显示最大数量的数字

  22. 22

    最大数量选择器

  23. 23

    选择排序以查找未排序数组中的最大数字

  24. 24

    在 MySQL 中按首字母选择最大数字组

  25. 25

    如何在javascript中的许多字符串中选择数字字符串(仅包含数字的字符串)而忽略其余字符串?

  26. 26

    如何创建获取4个数字并返回最大数字的max方法?

  27. 27

    如何从一系列数字中获得最小和最大数字?

  28. 28

    如何找出包含不同数字的许多文档中的最大数字

  29. 29

    在 Postgres 列中插入最大数值

热门标签

归档