2017-01-02 4 views
3

Мне нужно рассчитать расстояние между ярлыками между каждой строкой в ​​кадре данных. Возврат должен быть матрицей/фреймом данных, представляющим расстояние.вычислить расстояние jaccard между строками в r

так:

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

мои данные:

dput (пункты [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, 0L, 1L), BlackWhite = c(0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L)), .Names = c("Drama", "Comedy", "Crime", 
"SciFi", "Kids", "Classic", "Foreign", "Thriller", "Action", 
"Adventure", "Animation", "Adult", "History", "Documentry", "Nature", 
"Horror", "Show", "Series", "BlackWhite"), row.names = c(NA, 
10L), class = "data.frame") 

мой код:

Jaccard_dist <- dist(items, items, method = "Jaccard") 

write.csv(Jaccard_dist,'Jaccard_dist.csv') 

знаете ли вы способ сделать это, не используя два for-loops?

+0

нет ' "Jaccard"' метод для функции 'дист()', хотя. – mtoto

ответ

2

Не знаете, зачем вам нужны два цикла.

Вы можете попробовать библиотеку proxy и использование:

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

Это возвращает:

# 
     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 
Смежные вопросы