Toutes les paires possibles dans tidyverse


mrhd

Je voudrais créer toutes les paires possibles entre les lignes d'un dataframe sans doublons (c'est-à-dire que A_B est le même que B_A).

Existe-t-il une manière élégante de le faire dans tidyverse?

Exemple de données:

df <- tibble(
  id   = 1:5,
  name = c( 'Alice', 'Bob', 'Charlie', 'Diane', 'Fred' )
)

Production attendue:

> df_pairs
# A tibble: 10 x 2
   id    name         
   <chr> <chr>        
 1 1_2   Alice_Bob    
 2 1_3   Alice_Charlie
 3 1_4   Alice_Diane  
 4 1_5   Alice_Fred   
 5 2_3   Bob_Charlie  
 6 2_4   Bob_Diane    
 7 2_5   Bob_Fred     
 8 3_4   Charlie_Diane
 9 3_5   Charlie_Fred 
10 4_5   Diane_Fred 

J'ai pu le faire en traversant , mais j'aimerais savoir s'il existe un moyen plus simple:

df_pairs <- df %>% select( id1 = id, name1 = name ) %>% 
  crossing(df %>% select(id2 = id, name2 = name) ) %>%
  dplyr::filter( id1 < id2) %>%
  unite( id, id1, id2 ) %>%
  unite( name, name1, name2 )
Ronak shah

Il semble que vous deviez utiliser combnpour éviter les doublons.

get_combn <- function(x) {
  combn(x, 2, paste, collapse = "_")
}

as.data.frame(lapply(df, get_combn))

#    id          name
#1  1_2     Alice_Bob
#2  1_3 Alice_Charlie
#3  1_4   Alice_Diane
#4  1_5    Alice_Fred
#5  2_3   Bob_Charlie
#6  2_4     Bob_Diane
#7  2_5      Bob_Fred
#8  3_4 Charlie_Diane
#9  3_5  Charlie_Fred
#10 4_5    Diane_Fred

qui peut également être appliqué avec purrr::map_df

purrr::map_df(df, get_combn)

Articles connexes


Trouver toutes les paires possibles dans un tableau

user169743: C'est quand j'essaye de faire des trucs comme ça, je me rends compte que j'ai vraiment besoin d'aller à l'université! Quoi qu'il en soit, j'ai un tableau de chaînes (275), je dois les parcourir et créer des chaînes de toutes les paires possibles, e

Somme de toutes les paires d'éléments possibles dans un tableau

Rohit Vyavahare J'essayais de résoudre un problème, où un tableau d'entiers est donné, je dois trouver la somme de toutes les paires d'éléments possibles dans un tableau donné. Par exemple, le tableau est 1,2,3,4 alors il devrait donner 1 + 2 + 1 + 3 + 1 + 4 +

Trouvez toutes les paires possibles

oscar Je travaille sur du code erlang et je veux créer une fonction récursive pour extraire toutes les paires possibles d'une liste. La liste peut ne contenir aucun élément, mais elle peut contenir jusqu'à 70 éléments. Écrire des cas pour tous ces événements e

Toutes les paires possibles sur n

Léon J'ai une liste d'objets et je veux vérifier s'ils entrent en collision. Ils ont une coordonnée ax et y et un rayon (ce sont des sphères). Maintenant, je ne peux pas simplement faire 2 boucles for l'une dans l'autre, car cela ferait 1. glisser vers le bas

javascript : renvoie toutes les paires possibles dans le tableau

Hamid Bakhtiari le titre explique tout d'une manière ou d'une autre, j'aimerais utiliser la méthode "Combinaison" des mathématiques, voici la page Wikipedia pour être clair: https://en.wikipedia.org/wiki/Combination J'ai déjà trouvé la solution avec deux boucl