Ich habe eine data.table :
groups <- data.table(group = c("A", "B", "C", "D", "E", "F", "G"),
code_1 = c(2,2,2,7,8,NA,5),
code_2 = c(NA,3,NA,3,NA,NA,2),
code_3 = c(4,1,1,4,4,1,8))
group code_1 code_2 code_3
A 2 NA 4
B 2 3 1
C 2 NA 1
D 7 3 4
E 8 NA 4
F NA NA 1
G 5 2 8
Was ich erreichen möchte, ist, dass jede Gruppe anhand der verfügbaren Codes die unmittelbaren Nachbarn findet. Beispiel: Gruppe A hat aufgrund von Code_1 unmittelbare Nachbargruppen B, C (Code_1 ist in allen Gruppen gleich 2) und aufgrund von Code_3 unmittelbare Nachbargruppen D, E (Code_3 ist in allen diesen Gruppen gleich 4).
Ich habe versucht, für jeden Code die erste Spalte (Gruppe) basierend auf den Übereinstimmungen wie folgt zu unterteilen:
groups$code_1_match = list()
for (row in 1:nrow(groups)){
set(groups, i=row, j="code_1_match", list(groups$group[groups$code_1[row] == groups$code_1]))
}
group code_1 code_2 code_3 code_1_match
A 2 NA 4 A,B,C,NA
B 2 3 1 A,B,C,NA
C 2 NA 1 A,B,C,NA
D 7 3 4 D,NA
E 8 NA 4 E,NA
F NA NA 1 NA,NA,NA,NA,NA,NA,...
G 5 2 8 NA,G
Das "irgendwie" funktioniert, aber ich würde annehmen, dass es eine Art Datentabelle gibt, wie man das macht. Ich habe es versucht
groups[, code_1_match_2 := list(group[code_1 == groups$code_1])]
Das funktioniert aber nicht.
Vermisse ich einen offensichtlichen Datentabellentrick, um damit umzugehen?
Mein ideales Fallergebnis würde folgendermaßen aussehen (was derzeit die Verwendung meiner Methode für alle drei Spalten und die anschließende Verkettung der Ergebnisse erfordern würde):
group code_1 code_2 code_3 Immediate neighbors
A 2 NA 4 B,C,D,E
B 2 3 1 A,C,D,F
C 2 NA 1 A,B,F
D 7 3 4 B,A
E 8 NA 4 A,D
F NA NA 1 B,C
G 5 2 8
igraph
, die wirklich interessant sein könnte.