Tôi có một dữ liệu .
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
Những gì tôi muốn đạt được, là cho mỗi nhóm để tìm những người hàng xóm ngay lập tức dựa trên các mã có sẵn. Ví dụ: Nhóm A có các nhóm lân cận B, C ngay lập tức do mã_1 (mã_1 bằng 2 trong tất cả các nhóm) và có các nhóm lân cận ngay lập tức D, E do code_3 (code_3 bằng 4 trong tất cả các nhóm đó).
Những gì tôi đã thử là cho mỗi mã, đặt lại cột (nhóm) đầu tiên dựa trên các kết quả khớp như sau:
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
"Loại" này hoạt động nhưng tôi sẽ cho rằng có một loại bảng dữ liệu hơn để làm điều này. Tôi đã thử
groups[, code_1_match_2 := list(group[code_1 == groups$code_1])]
Nhưng điều này không làm việc.
Tôi có thiếu một số thủ thuật bảng dữ liệu rõ ràng để đối phó với nó?
Kết quả trường hợp lý tưởng của tôi sẽ giống như thế này (hiện đang yêu cầu sử dụng phương pháp của tôi cho cả 3 cột và sau đó nối các kết quả):
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
, nó có thể thực sự thú vị.