2016-07-19 21 views
-1

Ich habe einen Datenrahmen wie unten.Identifizieren der Häufigkeit von Elementen in der Liste

11,15,12,25 
11,12 
15,25 
134,45,56 
46 
45,56 
15,12 
66,45,56,24,14,11,25,12,134 

Ich möchte die Häufigkeit der Paare/Tripel oder höher, die in den Daten auftritt. Sagen Sie zum Beispiel, in obigen Daten das Auftreten von Paaren wie sieht unter

item  No of occurrence 
11,12  3 
11,25  2 
15,12  2 
15,25  2 
. 
. 
45,56  3 
134,45,56 2 ....and so on 

Ich versuche, einen R-Code für die oben zu schreiben, und ich bin zu finden Schwierigkeiten, dies zu nähern.

+0

Bitte Ihre Q nicht markieren, wenn alle Umbauten, für die Sie eine Antwort möchten. – Arun

+0

Es ist möglich, den head() des Datenrahmens und der str() zu haben – CClaire

+0

Das ist keine gültige Datenrahmenstruktur. – mkt

Antwort

1

eine 1 Spalte data.frame mit Komma Aufgrund der Variablen zu trennen, sollte folgendes Ihr gewünschte Ergebnis:

# split column into a list 
myList <- strsplit(df$V1, split=",") 
# get all pairwise combinations 
myCombos <- t(combn(unique(unlist(myList)), 2)) 

# count the instances where the pair is present 
myCounts <- sapply(1:nrow(myCombos), FUN=function(i) { 
        sum(sapply(myList, function(j) { 
           sum(!is.na(match(c(myCombos[i,]), j)))})==2)}) 

# construct final matrix 
allDone <- cbind(matrix(as.integer(myCombos), nrow(myCombos)), myCounts) 

Diese eine Matrix zurück, wo die ersten beiden Spalten die Elemente im Vergleich und in der dritten Spalte sind der Anzahl, dass diese Elemente in der Zeile des data.frame sind.

Daten

df <- read.table(text="11,15,12,25 
11,12 
15,25 
134,45,56 
46 
45,56 
15,12 
66,45,56,24,14,11,25,12,134", as.is=TRUE) 
+0

@Imo Dies hat die Magie. Ich danke dir sehr. Und noch eine Sache, ist es möglich, alle Kombinationen zu überprüfen, anstatt nur Paare. Sagen wir zum Beispiel alle möglichen Kombinationen und zähle die Frequenz für die jeweilige Kombination im Datenrahmen. – ssan

+1

Das ist möglich, allerdings etwas mühsamer: Sie müssen eine zusätzliche Schleife hinzufügen, in der sich myCombos ändert, und Sie passen das zweite Argument an 'combn (, k)'. In dieser neuen Schleife würde k von 2 auf eine größere ganze Zahl eingestellt werden. – lmo