Bonjour,
J'ai 13000 individus qui ont plusieurs variables, notamment x et y, qui sont des chaînes de caractères. J'ai donc un vecteur x de taille 13000 et un vecteur y de taille 13000, qui mesurent ces variables pour chaque individu. (x[i] et y[i] donnent les valeurs des variables de l'individu i)
A partir du vecteur x, j'ai construit une matrice matx de dimension 13000x13000 telle que le coefficient en position (i,j) = 1 si x[i]==x[j] et 0 sinon.
Pareil pour le vecteur y, j'ai construit une matrice maty de dimension 13000x13000 telle que le coefficient en position (i,j) = 1 si y[i]==y[j] et 0 sinon.
Ces deux matrices sont des matrices creuses.
Ces matrices sont symétriques, j'ai donc appliqué :
J'aimerais maintenant savoir combien il y a de couples (i,j) tels que : matx[i,j]==maty[i,j] & matx[i,j]==1
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 matx[!upper.tri(matx)] <- 0 maty[!upper.tri(maty)] <- 0
En d'autres termes, je voudrais savoir le nombre de couples (i,j) possibles tels que la chaîne de caractère de i, et celle de j, soient les mêmes pour la variable x ET pour la variable y.
J'ai essayé de calculer
Mais ce calcul prend beaucoup trop de temps.
Code : Sélectionner tout - Visualiser dans une fenêtre à part length(which(matx==maty & matx==1))
J'ai également essayé d'utiliser le produit matriciel, mais j'ai beaucoup de mal à comprendre le sens des résultats.
Je ne sais pas si je devrais faire matx%*%maty puis calculer la somme ? Ou bien matx%*%t(maty) et faire la somme ?
En espérant avoir été clair, merci d'avance !
Partager