web-dev-qa-db-fra.com

"NAs introduits par coercition" lors de l'analyse des clusters dans R

Les gars, je suis nouveau dans ce langage, j'exécute une analyse de cluster sur une trame de données, mais quand je calcule la distance, j'obtiens cet avertissement "NA introduits par coercition". Qu'est-ce que ça veut dire?

d <- dist(as.matrix(mydata1))

  Warning message:
In dist(as.matrix(mydata1)) : NAs introduced by coercion

Mon échantillon de données est

Metafamily     Total         July cpc      July cse_pla    July offline   July organic  
xerox 8560     275.829417    0.20943223    0.032628862     0.169210813    0.1130048 
office-supplie  246.9125664  0.057833047   0.020209909     0.535358617    0.136165617

Dans cette colonne, à l'exception de la métafamille, toutes les colonnes sont de classe numérique.

Les gars, aidez-moi à résoudre ce problème.

9
Ravee

C'est cette première colonne qui crée le problème:

> a <- c("1", "2",letters[1:5], "3")
> as.numeric(a)
[1]  1  2 NA NA NA NA NA  3
Warning message:
NAs introduced by coercion 

À l'intérieur de dist, il doit y avoir une coercition sur numérique, ce qui génère l'AN comme ci-dessus.

Je suggérerais d'appliquer dist sans la première colonne ou mieux de déplacer cela vers rownames si possible, car le résultat sera différent:

> dist(df)
          1         2         3         4
2 1.8842186                              
3 1.9262360 1.2856110                    
4 3.2137871 1.7322788 2.9838920          
5 1.3299455 0.9872963 1.9158079 1.8889050
Warning message:
In dist(df) : NAs introduced by coercion
> dist(df[-1])
         1        2        3        4
2 1.538458                           
3 1.572765 1.049697                  
4 2.624046 1.414400 2.436338         
5 1.085896 0.806124 1.564251 1.542284

btw: vous n'avez pas besoin de as.matrix lors de l'appel dist. Il le fera de toute façon en interne.

EDIT: utilisation des noms de domaine

rownames(df) <- df$id

> df
  id       var1       var2
A  A -0.6264538 -0.8204684
B  B  0.1836433  0.4874291
C  C -0.8356286  0.7383247
D  D  1.5952808  0.5757814
E  E  0.3295078 -0.3053884

> dist(df[-1]) # you colud also remove the 1st col at all, using df$id <- NULL.
         A        B        C        D
B 1.538458                           
C 1.572765 1.049697                  
D 2.624046 1.414400 2.436338         
E 1.085896 0.806124 1.564251 1.542284
15
Michele