【问题标题】:Create groups from part of string in a column in R从R中的列中的部分字符串创建组
【发布时间】:2017-11-04 06:41:00
【问题描述】:

我正在处理来自微阵列的 DNA 甲基化数据。阵列中的每个“探针”都有多个与之相关的基因,每个基因中也有多个探针。这是一个简短的例子:

|probe      | P.Value| adj.P.Val|      Dbeta|UCSC_REFGENE_NAME          |
|:----------|-------:|---------:|----------:|:--------------------------|
|cg23516680 |   2e-07| 0.0003419| -0.0172609|LYST                       |
|cg02390624 |   2e-07| 0.0003419|  0.0170831|SYTL2;SYTL2;SYTL2          |
|cg08808720 |   2e-07| 0.0003424| -0.0129818|KIF5C;MIR1978              |
|cg12074090 |   2e-07| 0.0003300| -0.0169523|ANGPT2;ANGPT2;ANGPT2;MCPH1 |
|cg10376100 |   1e-07| 0.0002714|  0.0172562|LYST;MIR1537               |

我想做的是根据 UCSC_REFGENE_NAME 列中出现的任何字符名称(基因)进行分组(例如,一组将是与基因 LYST 相关的所有探针,另一个都在 MIR1537)

积分:

  • 我知道这将导致单个探针/行出现 >1(LYSTMIR1537 都应该是包含 cg10376100 的组)
  • 我不希望相同的探针针对相同的基因出现 >1(例如,对于 ANGPT2,cg12074090 应该只出现一次)。

建议?

【问题讨论】:

  • 我认为您最好制作一个包含两列的单独表格:probeUCSC_REFGENE_NAME,这将在页面下方运行。请参阅stackoverflow.com/questions/13773770/… 了解如何将字符串拆分为单独的行。
  • 这很有帮助,是的,很简单。谢谢。

标签: r


【解决方案1】:

扩展@thelatemail 的评论,您可以使用tidyr::separate_rowsUCSC_REFGENE_NAME 列中的每个单独条目创建一行。接下来,您可以使用dplyr::distinct 删除重复的条目。

library(dplyr)
library(tidyr)

df %>% 
  separate_rows(UCSC_REFGENE_NAME, sep = ";") %>%
  distinct()

#>        probe P.Value adj.P.Val      Dbeta UCSC_REFGENE_NAME
#> 1 cg23516680   2e-07 0.0003419 -0.0172609              LYST
#> 2 cg02390624   2e-07 0.0003419  0.0170831             SYTL2
#> 3 cg08808720   2e-07 0.0003424 -0.0129818             KIF5C
#> 4 cg08808720   2e-07 0.0003424 -0.0129818           MIR1978
#> 5 cg12074090   2e-07 0.0003300 -0.0169523            ANGPT2
#> 6 cg12074090   2e-07 0.0003300 -0.0169523             MCPH1
#> 7 cg10376100   1e-07 0.0002714  0.0172562              LYST
#> 8 cg10376100   1e-07 0.0002714  0.0172562           MIR1537

使用的数据

txt = " |probe      | P.Value| adj.P.Val|      Dbeta|UCSC_REFGENE_NAME          |
  |cg23516680 |   2e-07| 0.0003419| -0.0172609|LYST                       |
  |cg02390624 |   2e-07| 0.0003419|  0.0170831|SYTL2;SYTL2;SYTL2          |
  |cg08808720 |   2e-07| 0.0003424| -0.0129818|KIF5C;MIR1978              |
  |cg12074090 |   2e-07| 0.0003300| -0.0169523|ANGPT2;ANGPT2;ANGPT2;MCPH1 |
  |cg10376100 |   1e-07| 0.0002714|  0.0172562|LYST;MIR1537               |"

df <- read.table(text = stringr::str_replace_all(txt, "\\|", " "),
           header = TRUE, stringsAsFactors = FALSE)

【讨论】:

  • 是的,行得通!感谢您帮助我解决这个问题。我会给你一个加分,但我是 Stackoverflow 的懦夫,所以我还不能。
猜你喜欢
  • 2019-03-08
  • 2022-08-11
  • 2022-06-17
  • 2020-04-23
  • 2016-03-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-06
相关资源
最近更新 更多