Réunir 2 matrices pour en former 1

Questions sur les objets de R et la manipulation des données

Modérateur : Groupe des modérateurs

Sébastien Hamel
Messages : 71
Enregistré le : 11 Mai 2006, 08:00

Réunir 2 matrices pour en former 1

Messagepar Sébastien Hamel » 10 Aoû 2006, 11:50

j'ai en ma possession 2 matrices:
1- nommée 'A' avec pour dimension [3277,1]
2- nommée 'B' avec pour dimension [7327,1]

Avant d'aller plus, ces deux matrices faisaient parties d'une seule nommée 'AB' qui avait donc pour dimension [10604,1].
Donc de la matrice 'AB' j'ai créer 2 matrices: 'A' & 'B' qui ont subi différent traitement mais peut importe.

Je souhaiterais recomposer cette matrice 'AB' avec la réunion de la matrice 'A' et la matrice 'B' sachant que chacune de ces matrices possèdent en rownames(A) et rownames(B) les numéros de ligne de la matrice dont elles sont tirées.
Donc rownames(A)+rownames(B)=length(AB)

par exemple:

Code : Tout sélectionner

>a<-matrix(1:6,3,2)
>rownames(a) <- c(1,2,6)
>a
  [,1] [,2]
1    1    4
2    2    5
6    3    6
>b<-matrix(1:8,4,2)
> rownames(b) <- c(3,4,5,7)
> b
  [,1] [,2]
3    1    5
4    2    6
5    3    7
7    4    8

Je voudrais donc pouvoir reconstruire cette matrice:

Code : Tout sélectionner

>ab
[,1] [,2]
1    1    4
2    2    5
3    1    5
4    2    6
5    3    7
6    3    6
7    4    8

Comment puis-je faire pour reconstruire 'AB' à partir des rownames de 'A' & 'B'

Vincent Andres
Messages : 13
Enregistré le : 17 Juil 2006, 09:27

Re: Réunir 2 matrices pour en former 1

Messagepar Vincent Andres » 10 Aoû 2006, 12:50

?rbind

Sébastien Hamel
Messages : 71
Enregistré le : 11 Mai 2006, 08:00

Messagepar Sébastien Hamel » 10 Aoû 2006, 15:46

Ok, je vois ce que tu veux dire mais avec cbind ou cbind on colle tout bout à bout. Donc si ma matrice avait une structure spatiale, c'est foutu!!

Je vais poser le pb autrement.

Disons que ma structure spatiale est donnée par la matrice de base 'AB' de dimension [10604, 1].

Je voudrais insérer les résultats de ma matrice 'B' de dimension [3277, 1] dans la matrice de base 'AB'.
En sachant que le rownames(B)= les lignes correspondantes dans ma matrice 'AB'. Ainsi j'ai gardé avec le rownames(B) l'information spatiale pour réinjecter les données au bon endroit dans ma matrice de base 'AB'.

Pourrais tu me donner un exemple car moi je n'y arrive pas.

Code : Tout sélectionner

AB[rownames(AB)==rownames(B)] <- B[rownames(AB)==rownames(B)]

J'ai essayé de cette manière mais j'ai un pb avec la longueur d'objet le plus long & le plus court

Vincent Andres
Messages : 13
Enregistré le : 17 Juil 2006, 09:27

Messagepar Vincent Andres » 10 Aoû 2006, 16:26

Sébastien Hamel a écrit :Ok, je vois ce que tu veux dire mais avec cbind ou cbind on colle tout bout à bout. Donc si ma matrice avait une structure spatiale, c'est foutu!!

Mais non mais non, ... rien n'est jamais perdu !
1/ Tu scotches bien tes 2 matrices avec rbind()
mres = rbind(m1,m2);
2/ noms_tries = sort(rownames(mres));
3/ ... et hop :
mres = mres[noms_tries, ];
donne le résultat

?sort (et ?order, ?rank dans les see also)

Sébastien Hamel a écrit :Je vais poser le pb autrement. Je voudrais insérer ...

Il me semble que tu pars sur du compliqué
... alors que sous R il y a très souvent une solution très courte.


Retourner vers « Archives : Manipulation de données avec R »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 1 invité