2017-03-15 1 views
4

j'ai données comme celui-ci, où des seaux peuvent avoir des numéros d'articles:Comment trouver chevauchement seau à base sur les points communs dans r

Bucket A | Item 1 
Bucket A | Item 2 
Bucket A | Item 3 
Bucket B | Item 3 
Bucket B | Item 4 
Bucket C | Item 1 
Bucket C | Item 5 
Bucket C | Item 2 

Je veux trouver le chevauchement de l'élément de tous les seaux, si je reçois dans le format suivant (avec le seau de base sur la gauche):

  Bucket A | Bucket B | Bucket C 
Bucket A 100% | 33% | 66% 
Bucket B 50% | 100% | 0% 
Bucket C 66% | 0%  | 100% 
+1

Pouvez-vous définir 'chevauchement de baquets', ou faire correspondre le résultat de votre exemple à vos données d'exemple? – thelatemail

+2

Combien d'éléments ils ont en commun - mis à jour l'exemple – NBC

+1

Great - le rend beaucoup plus clair. – thelatemail

Répondre

2

est une façon ici en utilisant dplyr:

temp <- df %>% 
    group_by(V2) %>% 
    do(expand.grid(.$V1, .$V1, stringsAsFactors=FALSE)) %>% 
    ungroup() %>% 
    select(Var1, Var2) %>% 
    table() 
temp/diag(temp) 

      Var2 
Var1  Bucket A Bucket B Bucket C 
    Bucket A 1.0000000 0.3333333 0.6666667 
    Bucket B 0.5000000 1.0000000 0.0000000 
    Bucket C 0.6666667 0.0000000 1.0000000 

Données

df <- structure(list(V1 = c("Bucket A ", "Bucket A ", "Bucket A ", 
"Bucket B ", "Bucket B ", "Bucket C ", "Bucket C ", "Bucket C " 
), V2 = c(" Item 1", " Item 2", " Item 3", " Item 3", " Item 4", 
" Item 1", " Item 5", " Item 2")), .Names = c("V1", "V2"), class = "data.frame", row.names = c(NA, 
-8L)) 
+0

Vous avez une parenthèse supplémentaire là-dedans, mais sinon ça marche. Je vous remercie! – NBC

+0

Mis à jour, merci! – JasonWang