1) При условии, что входные данные DF
, воспроизводимые в примечании в конце, преобразуют все, кроме первых 2 столбцов, в матрицу 5x6, а затем преобразуют это в массив 5x2x3, переставляют его размеры и изменяют формуобратно в матрицу 3х10.Пакеты не используются.
m <- as.matrix(DF[-(1:2)]
nr <- nrow(m) # 5
nc <- ncol(m) # 6
matrix(aperm(array(m, c(nr, 2, nc/2)), c(3, 2, 1)), nc/2)
, давая:
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
[1,] "A" "A" "C" "C" "T" "T" "0" "0" "G" "T"
[2,] "G" "G" "G" "G" "T" "A" "0" "A" "0" "0"
[3,] "T" "T" "A" "A" "C" "G" "C" "G" "C" "A"
2) Разновидностью вышеупомянутого является первая транспонирование m
, преобразование его вмассив, а затем переставить только первые два измерения, возвращаясь к матрице в конце.
matrix(aperm(array(t(m), c(2, nc/2, nr)), c(2, 1, 3)), nc/2)
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
[1,] "A" "A" "C" "C" "T" "T" "0" "0" "G" "T"
[2,] "G" "G" "G" "G" "T" "A" "0" "A" "0" "0"
[3,] "T" "T" "A" "A" "C" "G" "C" "G" "C" "A"
Примечание
Lines <- "
group pos V1 V2 V3 V4 V5 V6
1 10 A A G G T T
2 11 C C G G A A
3 12 T T T A C G
4 13 0 0 0 A C G
5 14 G T 0 0 C A"
DF <- read.table(text = Lines, header = TRUE, as.is = TRUE)