本文首發於「生信補給站」Tidyverse|數據列的分分合合,一分多,多合一web
TCGA數據挖掘可作不少分析,前期數據「清洗」費時費力但很須要。函數
好比基因列爲ID的須要轉爲常見的symbol,基因列爲symbol|ID的就須要拆開了!spa
excel分列能夠解決,可是表達量數據較大,且excel容易產生「數據變形」。3d
使用TCGA下載的數據,使用如下幾行幾列, 做爲示例excel
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,名稱不規則,咱們只須要前面的基因名。code
使用separate
函數, 將「指定」分隔符出現的位置一列分紅多列blog
data %>%
separate(ID, into = c("Gene", "IDnum")) %>% head()
data %>%
separate(ID2, into = c("Gene2", "IDnum2"),sep = "/",remove = FALSE) %>%
head()
data %>%
separate(ID, into = c("Gene1", "IDnum1"),sep = "l",remove = FALSE) %>%
head()
按照一樣的方式,想把"|"分隔的ID拆分,發現報錯。?黑人問號臉ip
有問題能夠先?separate
或者help(separate)
查詢幫助函數,"|"爲特殊字符,能夠使用"[|]"
括起來或者"\\|"
,都可:rem
data %>%
separate(ID, into = c("Gene1", "IDnum1"),sep = "[|]",remove = FALSE) %>% head()
#或者
data2 <- data %>%
separate(ID, into = c("Gene1", "IDnum1"),sep = "\\|",remove = FALSE)
根據第幾個字符拆分,適合數據規整的,,,get
能夠用來將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列
1)能夠先默認試一下,如2.1所示;
2)使用R的幫助,必定!
使用unite
函數, 可將多列按照
data %>%
unite(ID_new, ID:ID2, sep = "_") %>% head()
◆ ◆ ◆ ◆ ◆