Преобразование матрицы в 1 мерный массив


У меня есть матрица (32X48).

Как я могу преобразовать матрицу в одномерный массив?

9 76

9 ответов:

либо прочитайте его с помощью "scan", либо просто сделайте так.вектор() на матрице. Вы можете сначала транспонировать матрицу, если хотите, по строкам или столбцам.

> m=matrix(1:12,3,4)
> m
     [,1] [,2] [,3] [,4]
[1,]    1    4    7   10
[2,]    2    5    8   11
[3,]    3    6    9   12
> as.vector(m)
 [1]  1  2  3  4  5  6  7  8  9 10 11 12
> as.vector(t(m))
 [1]  1  4  7 10  2  5  8 11  3  6  9 12

Если мы говорим о данных.фрейм, тогда вы должны спросить себя, являются ли переменные одного и того же типа? Если это так, вы можете использовать rapply или unlist, так как данные.рамки-Это списки, глубоко в их душах...

 data(mtcars)
 unlist(mtcars)
 rapply(mtcars, c) # completely stupid and pointless, and slower

попробовать c()

x = matrix(1:9, ncol = 3)

x
     [,1] [,2] [,3]
[1,]    1    4    7
[2,]    2    5    8
[3,]    3    6    9

c(x)

[1] 1 2 3 4 5 6 7 8 9

array(A) или array(t(A)) даст вам 1-d массив.

С ?matrix: "матрица-это частный случай двумерного "массива"."Вы можете просто изменить размеры матрицы/массива.

Elts_int <- as.matrix(tmp_int)  # read.table returns a data.frame as Brandon noted
dim(Elts_int) <- (maxrow_int*maxcol_int,1)

это может быть так поздно, в любом случае вот мой способ преобразования матрицы в вектор:

library(gdata)
vector_data<- unmatrix(yourdata,byrow=T))

надеюсь, что поможет

Вы можете использовать решение, Джошуа, но я думаю, что вам нужно Elts_int <- as.matrix(tmp_int)

или для петли:

z <- 1 ## Initialize
counter <- 1 ## Initialize
for(y in 1:48) { ## Assuming 48 columns otherwise, swap 48 and 32
for (x in 1:32) {  
z[counter] <- tmp_int[x,y]
counter <- 1 + counter
}
}

z-это 1D вектор.

простой и быстрый, так как массив 1d по существу является вектором

vector <- array[1:length(array)]

Если у вас вместо этого были данные.фрейм (ДФ), который имел несколько столбцов, и вы хотите векторизовать вы можете сделать

Как.матрица (df, ncol=1)