Преобразование матрицы в 1 мерный массив
У меня есть матрица (32X48).
Как я могу преобразовать матрицу в одномерный массив?
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
С
?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 вектор.