5 votes

Calculer la distance de Jaccard entre les lignes en r

Je dois calculer la distance de Jaccard entre chaque ligne d'un cadre de données. retour doit être une matrice/cadre de données représentant la distance.

comme ceci:

   1     2   3 ..
1  0    0.2  1 
2  0.2  0    0.4
3  1    0.4  0
.
.

mes données:

dput(items[1:10,])

structure(list(Drama = c(0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L), Comedy = c(0L, 1L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L), Crime = c(0L, 
1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L), SciFi = c(1L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L), Kids = c(1L, 0L, 0L, 0L, 0L, 0L, 0L, 
1L, 0L, 0L), Classic = c(1L, 0L, 0L, 1L, 0L, 0L, 0L, 1L, 0L, 
0L), Foreign = c(0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L), Thriller = c(0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L), Action = c(0L, 0L, 0L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L), Adventure = c(0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L), Animation = c(0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L), Adult = c(0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L), History = c(0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L), Documentry = c(0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L), Nature = c(0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L), Horror = c(0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 
0L), Show = c(0L, 1L, 1L, 0L, 1L, 0L, 0L, 0L, 0L, 0L), Series = c(0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L,

5voto

Aramis7d Points 1841

Ne suis pas sûr pourquoi vous avez besoin de deux boucles for.

Vous pouvez essayer la bibliothèque proxy et utiliser :

proxy::dist(dft, by_rows = TRUE, method = "Jaccard")

Ceci renvoie :

#
       1         2         3         4         5         6         7         8         9
#2  1.0000000                                                                                
#3  1.0000000 0.6666667                                                                      
#4  0.8000000 0.8000000 1.0000000                                                            
#5  1.0000000 0.8000000 0.6666667 0.8000000                                                  
#6  1.0000000 1.0000000 1.0000000 0.6666667 0.6666667                                        
#7  1.0000000 1.0000000 1.0000000 0.7500000 0.7500000 0.5000000                              
#8  0.5000000 1.0000000 1.0000000 0.5000000 0.8000000 0.6666667 0.7500000                    
#9  1.0000000 1.0000000 1.0000000 0.6666667 0.6666667 0.0000000 0.5000000 0.6666667          
#10 1.0000000 1.0000000 1.0000000 0.7500000 0.7500000 0.5000000 0.6666667 0.7500000 0.5000000

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X