2017-09-19 4 views
0

En supposant une trame de données comme défini ci-après:Generate Tableaux de fréquences pour Unordered données

A<-c("John","John","James","Brad") 
B<-c("Deb","Deb","Henry","Suzie") 
C<-c("Barry","Beth","Deb","Louise") 
D<-c("Ben","Dory","John","Simon") 
df<-data.frame(A,B,C,D) 
df 
     A  B  C  D 
1 John Deb Barry Ben 
2 John Deb Beth Dory 
3 James Henry Deb John 
4 Brad Suzie Louise Simon 

Comment peut-on aller sur la génération d'une table de fréquence indiquant le nombre total de fois la combinaison de valeurs dans la colonne A & B se trouvent dans la même rangée. La sortie pour ceci ressemblerait à ceci.

 A  B  n 
1 Brad Suzie  1 
2 James Henry  1 
3 John Deb  3 

Je suis au courant des tableaux de fréquence simples à l'aide dplyr mais je suis incapable de le faire fonctionner dans ce scénario.

+0

Avez-vous voulu dire 'bibliothèque (dplyr), count (rbind (df [1: 2], Intersection (df [1: 2], setNames (df [4: 3], les noms (df) [1 : 2]))), A, B) 'En relation avec [this] (https://stackoverflow.com/questions/9809166/count-number-of-rows-within-each-group) – akrun

+0

La combinaison John Deb est 2 ? pas 3 parce que vous voulez seulement 2 colonnes à droite? –

+0

Je veux résumer l'ensemble du tableau en fonction de l'info dans les deux premières colonnes. Donc la combinaison de John et Deb existe sur trois lignes. – Morts81

Répondre

0
df<-data.frame(A = c("John","John","James","Brad"), 
       B = c("Deb","Deb","Henry","Suzie"), 
       C = c("Barry","Beth","Deb","Louise"), 
       D = c("Ben","Dory","John","Simon"), stringsAsFactors = F) 

df$seq <- paste(df$A, df$B, df$C, df$D, sep = ",") 

names <- unique(c(df$A,df$B)) 
pairs <- combn(names, 2) 
finaldf <- data.frame(name1 = NULL, name2 = NULL, count = NULL) 

for(i in 1:ncol(pairs)){ 
    name1 <- pairs[1,i] 
    name2 <- pairs[2,i] 
    count <- length(which(grepl(name1,df$seq) & grepl(name2,df$seq))) 

    finaldf <- rbind(finaldf, data.frame(name1 = name1, name2 = name2, count = count)) 

} 

finaldf 

> finaldf 
name1 name2 count 
1 John James  1 
2 John Brad  0 
3 John Deb  3 
4 John Henry  1 
5 John Suzie  0 
6 James Brad  0 
7 James Deb  1 
8 James Henry  1 
9 James Suzie  0 
10 Brad Deb  0 
11 Brad Henry  0 
12 Brad Suzie  1 
13 Deb Henry  1 
14 Deb Suzie  0 
15 Henry Suzie  0