![](/img/trans.png)
[英]How to get R to create new column (named from left part of string in old column), and then put right part of string from old column into new column
[英]Create groups from part of string in a column in R
我正在處理來自微陣列的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中的所有探針 )
要點:
有什么建議嗎?
擴展@thelatemail的注釋,您可以使用tidyr::separate_rows
為UCSC_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)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.