Saya punya data.tabel :
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
Apa yang ingin saya capai, adalah untuk setiap kelompok untuk menemukan tetangga terdekat berdasarkan kode yang tersedia. Misalnya: Grup A memiliki grup tetangga langsung B, C karena kode_1 (kode_1 sama dengan 2 di semua grup) dan memiliki grup tetangga langsung D, E karena kode_3 (kode_3 sama dengan 4 di semua grup itu).
Apa yang saya coba adalah untuk setiap kode, dengan mengelompokkan kolom (grup) pertama berdasarkan kecocokan sebagai berikut:
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
Ini "agak" bekerja tetapi saya akan berasumsi ada lebih banyak jenis tabel data cara melakukan ini. Saya mencoba
groups[, code_1_match_2 := list(group[code_1 == groups$code_1])]
Tetapi ini tidak berhasil.
Apakah saya kehilangan beberapa trik tabel data yang jelas untuk menghadapinya?
Hasil kasus ideal saya akan terlihat seperti ini (yang saat ini akan membutuhkan menggunakan metode saya untuk semua 3 kolom dan kemudian merangkai hasilnya):
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
, itu bisa sangat menarik.