0
votes

Comment fusionner deux matrices avec la même taille dans R?

J'ai deux matrices de même taille. Je voudrais les fusionner.

Matrice d'entrée A: P>

  v1 v2 v3 v4 v5 v6
1  0  5  8  1  2  0
2  5  0  2  4  3  0
3  8  2  0  2  0  0
4  1  4  2  0  0  0
5  2  3  0  0  0  0
6  0  0  0  0  0  0


3 commentaires

A + B ? Une matrice sera-t-elle toujours des informations manquantes de l'autre matrice? Les informations manquantes seront-elles toujours zéro?


Si le boîtier zéro est vrai, la réponse est donc A + B comme @ AA5C1D2H2I1M1N2O1R2T1 suggéré.


Désolé, je n'ai pas précisé. Une matrice peut avoir des informations recouvertes de l'autre matrice. Les informations manquantes sont toujours nulles. La matrice devrait être comme celle mise à jour de la question.


3 Réponses :


0
votes

Voici une approche.

Premièrement, trouvez les zéros dans le inférieur.tri code> partie de la matrice et remplacez ceux-ci avec des valeurs de matrice b. P>

A[upper.tri(A)] <- t(A)[upper.tri(A)]
A
#      v1 v2 v3 v4 v5
# [1,]  0  5  8  1  2
# [2,]  5  0  2  4  3
# [3,]  8  2  0  2  5
# [4,]  1  4  2  0  3
# [5,]  2  3  5  3  0


0 commentaires

2
votes

Vous pouvez obtenir les 0 indices dans matrice A code> et remplacer les éléments correspondants de B code>.

inds <- A == 0
A[inds] <- B[inds]
A

#  v1 v2 v3 v4 v5
#1  0  5  8  1  2
#2  5  0  2  4  3
#3  8  2  0  2  5
#4  1  4  2  0  3
#5  2  3  5  3  0


1 commentaires

@Freeego heureux d'avoir été de l'aide! N'hésitez pas à Acceptez la réponse en cliquant sur Cochez la case à côté du bouton de vote à gauche si vous estimez que cela vous a été utile. . :-) Vous pouvez accepter une seule réponse par message.



2
votes

Sur la base du résultat attendu, vous pouvez également utiliser Pmax () code> ou ifelse () code>:

pmax(mat1, mat2)

     V1 V2 V3 V4 V5
[1,]  0  5  8  1  2
[2,]  5  0  2  4  3
[3,]  8  2  0  2  5
[4,]  1  4  2  0  3
[5,]  2  3  5  3  0

ifelse(mat1 == 0, mat2, mat1)

     V1 V2 V3 V4 V5
[1,]  0  5  8  1  2
[2,]  5  0  2  4  3
[3,]  8  2  0  2  5
[4,]  1  4  2  0  3
[5,]  2  3  5  3  0


0 commentaires