3 Stimmen

Erstellung einer binären Matrix in R

Ich habe 3 Datensätze mit 5 verschiedenen Ereignissen: list(c('e1','e3','e4'),c('e2','e4'),c('e1','e3','e5'))

Ich weiß nicht, wie viele Ereignisse es in meiner Liste geben wird. Daher muss ich sie auch zählen. Hier habe ich die Ereignisse e1 bis e5 als Beispiel gezeigt. Es können m Ereignisse geben, bei denen ich auch m finden muss. Wie finde ich m? Im Allgemeinen, wie erstellt man in R eine m-mal-n Binärmatrix, wobei m die Gesamtanzahl der Ereignisse und n die Anzahl der Datensätze ist? Ereignis-IDs können zufällig sein, nicht unbedingt vom Typ 'eN' wie 'MX050331','IIF02002' usw.

5voto

Hong Ooi Punkte 54641
# gemäß der zweiten Bearbeitung des Fragenstellers
# geht jetzt davon aus, dass es keine Ereignisse gibt, die noch nicht mindestens einmal beobachtet wurden
tr <- list(c('e1','e3','e4'),c('e2','e4'),c('e1','e3','e5'))
e <- unique(unlist(tr))
sapply(tr, function(x) e %in% x)

3voto

A5C1D2H2I1M1N2O1R2T1 Punkte 184056

Vielleicht so etwas:

x <- list(c('e1','e3','e4'),
          c('e2','e4'),
          c('e1','e3','e5'))
t(sapply(x, function(y) {
  table(factor(y, levels = c("e1", "e2", "e3", "e4", "e5")))
}))
#      e1 e2 e3 e4 e5
# [1,]  1  0  1  1  0
# [2,]  0  1  0  1  0
# [3,]  1  0  1  0  1

Natürlich kannst du das t weglassen, wenn du es lieber nicht transponieren möchtest.

Wenn die Anzahl und Namen der Ereignisse unbekannt sind, kannst du die Funktion wie folgt anpassen:

t(sapply(x, function(y) {
  myLevs <- unique(unlist(x))
  table(factor(y, levels = myLevs[order(myLevs)]))
}))

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X