Nombre d’occurrence sous R

Postez ici vos questions, réponses, commentaires ou suggestions - Les sujets seront ultérieurement répartis dans les archives par les modérateurs

Modérateur : Groupe des modérateurs

khaoula gammoudi
Messages : 43
Enregistré le : 22 Jan 2013, 16:48

Nombre d’occurrence sous R

Messagepar khaoula gammoudi » 29 Mar 2017, 16:03

Bonjour,
J'ai mon tableau "ubiquity":

Code : Tout sélectionner

product   pays 1   pays 2   pays 3   pays 4
p1   1   1   1   1
p2   1   1   0   1
p3   0   0   1   0
p4   0   1   0   0
p5   0   1   0   1
p6   0   0   1   0
p7   1   1   1   1
p8   0   0   0   0

Les indices 1 et 0 indiquent si p est produit par un pays donné ou non.
Je voudrais calculer, pour tout deux produits (i et k), combien de pays (j) produisent ces deux produits.
Je voudrais aussi représenter le résultat sous forme d'une matrice symétrique de produits comme suit:

Code : Tout sélectionner

 p1   p2   p3   p4   ...
p1    1   1   0   1
p2   6   0   1   2
p3   5   3   4   3
p4   0   1   0   1
...

Pour ce faire, j'ai essayé avec le code suivant:

Code : Tout sélectionner

> ubiquity <- read.csv('D:/ubiquity.csv', header = TRUE, sep = ";")
 >M<-matrix(nrow=nrow(ubiquity),*ncol=nrow(ubiquity))
> for (i in 1:nrow(ubiquity)){
+ for (k in i+1:nrow(ubiquity)){
+     t <- 0
+ for (j in 2:ncol(ubiquity)){
+ if(ubiquity[i,j]==ubiquity[k,j]){
+ t <- t+1
+ }
+ }
+ M[i,k] <- t
+ }
+ }
Error in if (ubiquity[i, j] == ubiquity[k, j]) { :
  valeur manquante là où TRUE / FALSE est requis

Je sais pas si la méthode que j'ai utilisé peut me donner le résultat souhaité et j'ai pas compris aussi l'erreur affiché sous R.
J'espère que vous pouvez m'aider.
Merci infiniment.
gammoudi

Pierre-Yves Berrard
Messages : 1029
Enregistré le : 12 Jan 2016, 23:30

Re: Nombre d’occurrence sous R

Messagepar Pierre-Yves Berrard » 29 Mar 2017, 18:55

Je ne sais pas pourquoi votre code retourne une erreur.
Une autre solution, peut-être plus simple :

Code : Tout sélectionner

np <- nrow(ubiquity)
M <- matrix(nrow = np, ncol = np)

for(i in 1:np) for(j in 1:np) {
  M[i, j] <- sum(ubiquity[i, ] & ubiquity[j, ])
}
PY

Logez Maxime
Messages : 3138
Enregistré le : 26 Sep 2006, 11:35

Re: Nombre d’occurrence sous R

Messagepar Logez Maxime » 29 Mar 2017, 19:25

Bonjour,

Code : Tout sélectionner

crossprod(t(ubiquity))
# ou
as.matrix(ubiquity) %*% ubiquity
Cordialement,
Maxime

khaoula gammoudi
Messages : 43
Enregistré le : 22 Jan 2013, 16:48

Re: Nombre d’occurrence sous R

Messagepar khaoula gammoudi » 29 Mar 2017, 20:10

Merci pour votre aide mais tout les solutions proposées m'ont affiché des erreurs :
1ere solution:

Code : Tout sélectionner

> M <- matrix(nrow = np, ncol = np)
>
> for(i in 1:np) for(j in 1:np) {
+   M[i, j] <- sum(ubiquity[i, ] & ubiquity[j, ])
+ }
There were 50 or more warnings (use warnings() to see the first 50)
> M
      [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11]
 [1,]   NA   NA   NA   NA   NA   NA   NA   NA   NA    NA    NA
 [2,]   NA   NA   NA   NA   NA   NA   NA   NA   NA    NA    NA
 [3,]   NA   NA   NA   NA   NA   NA   NA   NA   NA    NA    NA
 [4,]   NA   NA   NA   NA   NA   NA   NA   NA   NA    NA    NA
 [5,]   NA   NA   NA   NA   NA   NA   NA   NA   NA    NA    NA
 [6,]   NA   NA   NA   NA   NA   NA   NA   NA   NA    NA    NA
 [7,]   NA   NA   NA   NA   NA   NA   NA   NA   NA    NA    NA
 [8,]   NA   NA   NA   NA   NA   NA   NA   NA   NA    NA    NA
 [9,]   NA   NA   NA   NA   NA   NA   NA   NA   NA    NA    NA
[10,]   NA   NA   NA   NA   NA   NA   NA   NA   NA    NA    NA
[11,]   NA   NA   NA   NA   NA   NA   NA   NA   NA    NA    NA


2eme solution:

Code : Tout sélectionner

> crossprod(t(ubiquity))
Error in crossprod(x, y) :
  nécessite des arguments numériques/complexes matrice/vecteur
> as.matrix(ubiquity) %*% ubiquity
Error in as.matrix(ubiquity) %*% ubiquity :
  nécessite des arguments numériques/complexes matrice/vecteur
gammoudi

khaoula gammoudi
Messages : 43
Enregistré le : 22 Jan 2013, 16:48

Re: Nombre d’occurrence sous R

Messagepar khaoula gammoudi » 29 Mar 2017, 20:59

Pour la 1ere solution, je pense que R prend en compte la 1ere colonne contenant les noms des produits, pour cela l'algorithme ne fonctionne pas.
y a t-il une solution pour omettre la 1ere colonne dans l'algorithme ?
gammoudi

Logez Maxime
Messages : 3138
Enregistré le : 26 Sep 2006, 11:35

Re: Nombre d’occurrence sous R

Messagepar Logez Maxime » 29 Mar 2017, 21:01

re,

il suffit de ne pas prendre la première colonne : ubiquity[-1] ou ubiquity[,-1].

Cordialement,
Maxime

khaoula gammoudi
Messages : 43
Enregistré le : 22 Jan 2013, 16:48

Re: Nombre d’occurrence sous R

Messagepar khaoula gammoudi » 30 Mar 2017, 15:19

Merci tout le monde :)
gammoudi


Retourner vers « Questions en cours »

Qui est en ligne

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