Convertir une matrice en un tableau à 1 Dimension

J'ai une matrice (32X48).

Comment puis-je convertir la matrice en un tableau unidimensionnel?

76
demandé sur zx8754 0000-00-00 00:00:00

9 réponses

Lisez-le avec 'scan', ou faites simplement comme.vector() sur la matrice. Vous voudrez peut-être transposer la matrice en premier si vous le voulez par des lignes ou des colonnes.

> 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
171
répondu Spacedman 2018-03-26 14:19:43

Si nous parlons de données.frame, alors vous devriez vous demander sont les variables du même type? Si c'est le cas, vous pouvez utiliser rapply, ou unlist, puisque les données.les cadres sont des listes, au fond de leur âme...

 data(mtcars)
 unlist(mtcars)
 rapply(mtcars, c) # completely stupid and pointless, and slower
27
répondu aL3xa 2010-09-29 17:15:14

Essayez 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
25
répondu Greg 2010-09-29 17:15:18

array(A) ou array(t(A)) vous donnera un 1-d tableau.

11
répondu Tian 2012-10-26 08:23:41

From ?matrix: "une matrice est le cas particulier d'un 'tableau' bidimensionnel."Vous pouvez simplement changer les dimensions de la matrice / tableau.

Elts_int <- as.matrix(tmp_int)  # read.table returns a data.frame as Brandon noted
dim(Elts_int) <- (maxrow_int*maxcol_int,1)
9
répondu Joshua Ulrich 2010-09-29 16:22:25

Il pourrait être si tard, de toute façon voici ma façon de convertir la matrice en vecteur:

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

J'espère que cela aidera

5
répondu hema 2013-11-25 00:43:07

Vous pouvez utiliser la solution de Joshua mais je pense que vous avez besoin de Elts_int <- as.matrix(tmp_int)

Ou pour les boucles:

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 est un vecteur 1d.

1
répondu Brandon Bertelsen 2010-09-29 16:18:59

, Simple et rapide depuis un tableau 1d est essentiellement un vecteur

vector <- array[1:length(array)]
1
répondu Jeff 2013-05-03 21:27:55

Si vous aviez à la place une donnée.cadre (df) qui avait plusieurs colonnes et que vous souhaitez vectoriser vous pouvez faire

Comme.matrice (DF, ncol=1)

1
répondu Lee Sande 2016-12-20 00:02:13