2016-06-09 2 views
-1

Matlab может выполнить эту задачу. До сих пор я не могу понять, используя матрицы(), t() и reShape().R: транспонировать серию в матрицу с игнорирующими остатками

Мое намерение состоит в том, чтобы перенести серию на матрицу с фиксированными 10 строками, а число столбцов варьируется в зависимости от длины ряда данных. Если это некоторые останки, они могут быть отброшены.

Например:

Row #1  1 2 3 4 
Row #2  5 6 7 8 
Row #3  9 10 11 12 
Row #4 13 14 15 16 
Row #5 17 18 19 20 
Row #6 21 22 23 24 
Row #7 25 26 27 28 
Row #8 29 30 31 32 
Row #9 33 34 35 36 
Row #10 37 38 39 40 

Если есть какие-либо остатки слева (т.е., 41 ~ 49), эти данные могут быть просто отброшены.

Любые предложения?

+1

Можете ли вы конкретно показать, как должны выглядеть матрицы ввода и вывода? –

+0

Что именно вы спрашиваете? –

ответ

1

Это то, о чем я думаю, что вы просите. Вектор произвольной длины и данных. Для преобразования в матрицу с nrow 10 и ncol на основе длины данных.

#your series of arbitrary length 
data = 1:49 

#calculate number of columns based on length 
col = as.integer(length(data)/10) 

#max index 
maxIndx = 10*col 

#create and transpose matrix 
yourMtx = t(matrix(data[0:maxIndx],col,10)) 

#your matrix 
>  [,1] [,2] [,3] [,4] 
[1,] 1 2 3 4 
[2,] 5 6 7 8 
[3,] 9 10 11 12 
[4,] 13 14 15 16 
[5,] 17 18 19 20 
[6,] 21 22 23 24 
[7,] 25 26 27 28 
[8,] 29 30 31 32 
[9,] 33 34 35 36 
[10,] 37 38 39 40 

#create reverse matrix 
revMtx = yourMtx[,rev(seq_len(ncol(yourMtx)))] 

#reverse matrix 
>  [,1] [,2] [,3] [,4] 
[1,] 4 3 2 1 
[2,] 8 7 6 5 
[3,] 12 11 10 9 
[4,] 16 15 14 13 
[5,] 20 19 18 17 
[6,] 24 23 22 21 
[7,] 28 27 26 25 
[8,] 32 31 30 29 
[9,] 36 35 34 33 
[10,] 40 39 38 37 
+0

Можете ли вы объяснить, что такое maxIndx? –

+0

Я понял. Благодарю. Это то, что я хочу. Можете ли вы изменить порядок рядов по строкам [1,], [3,], [5,], [7,], [9,]? Например, реверсирование 1 2 3 4 до 4 3 2 1. –

+0

Я добавил обмен maxIndx и столбцов к решению выше –

0

Если я правильно понимаю ваш вопрос, это выглядит как подход, который вы могли бы использовать.

# generate my series 
myseries <- 1:49 

# specify number of columns and rows 
ncols <- 4 
nrows <- 10 

# create a matrix with the first ncols*nrows elements and fill by row 

mymatrix <- matrix(myseries[1:(ncols*nrows)], 
        ncol = ncols, nrow = nrows, byrow = TRUE) 

mymatrix 
     [,1] [,2] [,3] [,4] 
[1,] 1 2 3 4 
[2,] 5 6 7 8 
[3,] 9 10 11 12 
[4,] 13 14 15 16 
[5,] 17 18 19 20 
[6,] 21 22 23 24 
[7,] 25 26 27 28 
[8,] 29 30 31 32 
[9,] 33 34 35 36 
[10,] 37 38 39 40 
Смежные вопросы