Упорядочить номера хромосом в кадре данных - PullRequest
0 голосов
/ 04 января 2019

У меня есть файл, который содержит образец хромосомы и его частоты:

 a
 sample   Chr_No   frequency
 sample-1  chr1:         0
 sample-1  chr2:         0
 sample-1  chr3:         0
 sample-1  chr4:         1
 sample-1  chr5:         0
 sample-1  chr6:         0
 sample-1  chr7:         0
 sample-1  chr8:         0
 sample-1  chr9:         1
 sample-1  chr10         0
 sample-1  chr11         0
 ......

Я хочу преобразовать его как фрейм данных, поэтому я использую его в R:

 b <- dcast( a, Sample ~ Chr_No, value.var = "Frequency", fill = 0 )

This command is creating data frame but the arrangement of chromosome is different:

Как я могу удалить ":" из Chr_No и расположить Chr_No как Chr1 Chr2 Chr3 ....... во фрейме данных?

Ответы [ 2 ]

0 голосов
/ 04 января 2019

Другой вариант для order перед dcast состоит в том, чтобы изменить его на factor столбец с levels, указанным после удаления : в конце строки в 'Chr_No'

library(data.table)
setDT(a)[, Chr_No := factor(sub(':$', '', Chr_No), levels = paste0("chr", 1:11))]

Затем выполните dcast

dcast( a, sample ~ Chr_No, value.var = "frequency", fill = 0 )
#     sample chr1 chr2 chr3 chr4 chr5 chr6 chr7 chr8 chr9 chr10 chr11
#1: sample-1    0    0    0    1    0    0    0    0    1     0     0

данные

a <- structure(list(sample = c("sample-1", "sample-1", "sample-1", 
"sample-1", "sample-1", "sample-1", "sample-1", "sample-1", "sample-1", 
 "sample-1", "sample-1"), Chr_No = c("chr1:", "chr2:", "chr3:", 
 "chr4:", "chr5:", "chr6:", "chr7:", "chr8:", "chr9:", "chr10", 
 "chr11"), frequency = c(0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 1L, 0L, 
 0L)), class = "data.frame", row.names = c(NA, -11L))
0 голосов
/ 04 января 2019

Сначала удалите двоеточие из имен, а затем используйте mixedsort, чтобы расположить имена как chr1, chr2.

library(gtools)

names(b) <- sub(":", "", names(b))
cbind(b[1], b[-1][mixedsort(names(b[-1]))])


#    sample chr1 chr2 chr3 chr4 chr5 chr6 chr7 chr8 chr9 chr10 chr11
#1 sample-1    0    0    0    1    0    0    0    0    1     0     0

Или мы можем сохранить все в базе R и удалитьвсе символы из names сохраняют только цифры и order вводят их после удаления двоеточия

cbind(b[1], b[-1][order(as.numeric(gsub("[[:alpha:]]", "", names(b[-1]))))])


#    sample chr1 chr2 chr3 chr4 chr5 chr6 chr7 chr8 chr9 chr10 chr11
#1 sample-1    0    0    0    1    0    0    0    0    1     0     0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...