2017-08-18 86 views
1

我有一個數據框包含約450K甲基化的beta值。 450個探針用於兩個樣品。該數據顯示在三列,看起來像這樣:如何重新排列數據框,以便一列中的值是行名稱?

>head(ICGC) 
submitted_sample_id probe_id methylation_value 
1 X932-01-4D   cg00000029   0.6 
2 X932-01-6D   cg00000029   0.4 
3 X932-01-4D   cg00000108   0.3 
4 X932-01-6D   cg00000108   0.7 
5 X932-01-4D   cg00000109   0.9 
6 X932-01-6D   cg00000109   0.1 

我想,這樣的探頭ID是rownames和樣品ID是列名,因此它看起來重新安排這data.frame像這樣:

>head(ICGC_2) 
      X932-01-4D X932-01-6D 
cg00000029 0.6   0.4 
cg00000108 0.3   0.7 
cg00000109 0.9   0.1 

我曾嘗試:

>library(tidyverse) 
ICGC_2 <- ICGC %>% remove_rownames %>% column_to_rownames(var = "probe_id") 

但隨着ICGC每個探針ID列中出現兩次(因爲有兩個樣本),並沒有工作。我也試過:

hello <- data.frame(ICGC[,-2], row.names = ICGC[,2]) 

但是這有同樣的問題。我想以這種方式重新排列數據的原因是因爲我想將beta值轉換爲M值並將此數據用作cpg.annotate中的對象(可通過Bioconductor軟件包DMRcate獲得) - cpg.annotate要求對象將獨特的Illumina探針ID作爲rownames和唯一的樣品ID作爲列名稱。

謝謝!

回答

3

你非常接近。 spread來自tidyr包的功能是您所需要的。

library(tidyverse) 

ICGC_2 <- ICGC %>% 
    spread(submitted_sample_id, methylation_value) %>% 
    remove_rownames() %>% 
    column_to_rownames(var = "probe_id") 
ICGC_2 
      X932-01-4D X932-01-6D 
cg00000029  0.6  0.4 
cg00000108  0.3  0.7 
cg00000109  0.9  0.1 

數據:

ICGC <- read.table(text = "submitted_sample_id probe_id methylation_value 
1 'X932-01-4D'   cg00000029   0.6 
2 'X932-01-6D'   cg00000029   0.4 
3 'X932-01-4D'   cg00000108   0.3 
4 'X932-01-6D'   cg00000108   0.7 
5 'X932-01-4D'   cg00000109   0.9 
6 'X932-01-6D'   cg00000109   0.1", 
        header = TRUE, stringsAsFactors = FALSE) 
2

在基礎R可以做到這一點:

wICGC <- reshape(ICGC, idvar = "probe_id", 
         timevar = "submitted_sample_id", direction = "wide") 
wICGC <- data.frame(wICGC[,-1], row.names=wICGC[,1]) 

wICGC 

#   methylation_value.X932.01.4D methylation_value.X932.01.6D 
# cg00000029       0.6       0.4 
# cg00000108       0.3       0.7 
# cg00000109       0.9       0.1 
1

對於一個不同的角度,也可以在使用reshapemelt

library(reshape) 
m <- melt(IGC, id=c("submitted_sample_id", "probe_id")) 
cast(m, probe_id~submitted_sample_id) 

> cast(m, probe_id~submitted_sample_id) 
    probe_id X932-01-4D X932-01-6D 
1 cg00000029  0.6  0.4 
2 cg00000108  0.3  0.7 
3 cg00000109  0.9  0.1