Tidyverse|數據列的分分合合,愛恨情仇


 

Tidyverse|數據列的分分合合,愛恨情仇

本文首發於“生信補給站”Tidyverse|數據列的分分合合,一分多,多合一

TCGA數據挖掘可做很多分析,前期數據“清洗”費時費力但很需要。

比如基因列為ID的需要轉為常見的symbol,基因列為symbol|ID的就需要拆開了!

excel分列可以解決,但是表達量數據較大,且excel容易產生“數據變形”。

一, 載入數據,R包

使用TCGA下載的數據,使用以下幾行幾列, 作為示例

library(tidyverse)
data <- read.csv("separate.csv",header = TRUE, check.name = FALSE)
head(data)
           ID          ID2 TCGA-18-3406-01A-01R-0980-07 TCGA-18-3407-01A-01R-0980-07
1       A1BG|1       A1BG/1                     741.6929                      46.7127
2   A1CF|29974   A1CF/29974                       0.0000                       0.4757
3  A2BP1|54715  A2BP1/54715                       0.0000                       0.0000
4  A2LD1|87769  A2LD1/87769                     170.2362                     118.4063
5 A2ML1|144568 A2ML1/144568                     128.3465                    1413.4158
6        A2M|2        A2M/2                    9074.6772                   11310.1713

可以看到第一列的ID,和人為添加的ID2,名稱不規則,我們只需要前面的基因名。

 

二,合久可分 - 一列拆多列

使用separate函數, 將“指定”分隔符出現的位置一列分成多列

2.1 默認,不指定分隔符

data %>% 
separate(ID, into = c("Gene", "IDnum")) %>% head()

img

2.2 指定分隔符且保留原始列

data %>% 
separate(ID2, into = c("Gene2", "IDnum2"),sep = "/",remove = FALSE) %>%
head()

img

2.3 特殊字符的指定方式

data %>% 
separate(ID, into = c("Gene1", "IDnum1"),sep = "l",remove = FALSE) %>%
head()

img

按照同樣的方式,想把"|"分隔的ID拆分,發現報錯。?黑人問號臉

有問題可以先?separate或者help(separate)查詢幫助函數,"|"為特殊字符,可以使用"[|]"括起來或者"\\|",均可:

data %>% 
separate(ID, into = c("Gene1", "IDnum1"),sep = "[|]",remove = FALSE) %>% head()
#或者
data2 <- data %>%
separate(ID, into = c("Gene1", "IDnum1"),sep = "\\|",remove = FALSE)

img

2.4,按照第幾個字符拆

根據第幾個字符拆分,適合數據規整的,,,

可以用來將TCGA中的sampleID轉為常見的16位,需要先轉置

#
data2 %>% select(Gene1,contains("TCGA")) %>% #選擇指定列
column_to_rownames(var = "Gene1") %>%  # 將Gene1列轉為rownames
t() %>% as.data.frame() %>% #數據轉置,樣本為行名
rownames_to_column(var="Sample") %>%  #行名變為數據中的列
separate(Sample, into = c("Sample", "bar"),sep = 16) %>%  #按照規則取前16個字符
select(-bar) #去掉分割后不需要的bar列

img

可參考:盤一盤Tidyverse| 篩行選列之select,玩轉列操作

Tips:

  • 1)可以先默認試一下,如2.1所示;

  • 2)使用R的幫助,一定!

 

三,分久必合-多列合並一列

使用unite函數, 可將多列按照“指定”分隔符合並為一列

data %>%
unite(ID_new, ID:ID2, sep = "_") %>% head()

img

 

◆ ◆ ◆ ◆ ◆

精心整理(含圖版)|你要的全拿走!有備無患

img

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM