Erstellen eines Datenrahmens für die Anzahl der Pairings basierend auf einer Ereignisspalte

Ich habe einen Datenrahmen, der eine Spalte enthält, die eine Ereignis-ID angibt. In einer weiteren Spalte werden die in diesem Ereignis verwendeten Produkte angezeigt. Jedes Produkt wird nur einmal für eine Veranstaltung verwendet und jede Veranstaltung enthält mindestens ein Produkt. Ich würde gerne wissen, wie oft jedes Produkt mit jedem anderen Produkt verwendet wird. Einige Beispieldaten sind unten:

set.seed(1)
events <- paste('Event ', sample(1:4, size = 15, replace = TRUE), sep = '')
events <- events[order(events)]

prods <- paste('Product ', c(1, 2, 3, 4, 1, 5, 6, 2, 4, 6, 7, 1, 2, 3, 5))

test_data <- data.frame(events, prods)
test_data
  events      prods
1  Event 1 Product  1
2  Event 1 Product  2
3  Event 1 Product  3
4  Event 1 Product  4
5  Event 2 Product  1
6  Event 2 Product  5
7  Event 2 Product  6
8  Event 3 Product  2
9  Event 3 Product  4
10 Event 3 Product  6
11 Event 3 Product  7
12 Event 4 Product  1
13 Event 4 Product  2
14 Event 4 Product  3
15 Event 4 Product  5

Produkt 1 und Produkt 2 treten zweimal im selben Ereignis auf (Ereignis 1 und Ereignis 4). Ich möchte also eine 2 für dieses Match zurückgeben. Produkt 1 und Produkt 7 treten niemals im selben Ereignis auf, daher möchte ich für dieses Paar eine 0 zurückgeben. Bei Übereinstimmungen zwischen denselben Artikeln kann ich problemlos die Gesamtanzahl der Produktverwendungen zurückgeben.

Es gibt zwei mögliche Formate und ich habe keine Präferenz, für die ich die Rückgabe sehen möchte.

Ein kurzer und fetter Datenrahmen, in dem die Produkte als Spaltenüberschriften und die Seite als Zeilenüberschriften über die Oberseiten laufen. Der Hauptteil dieses Datenrahmens wird mit der Anzahl der Übereinstimmungen gefüllt.Ein langer, schmaler Datenrahmen mit zwei Spalten, in denen alle möglichen Kombinationen von Produktpaarungen dargestellt werden, und eine dritte Spalte, in der angegeben ist, wie oft sie übereinstimmen.

Ich habe mit @ experimentieexpand.grid mit nichts zu zeigen.

Vielen Dank

Antworten auf die Frage(4)

Ihre Antwort auf die Frage