나는이 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
내가 달성하고자하는 것은 각 그룹이 사용 가능한 코드를 기반으로 즉각적인 이웃을 찾는 것입니다. 예를 들어, 그룹 A는 code_1 (모든 그룹에서 code_1이 2 임)로 인해 인접 이웃 그룹 B, C가 있고 code_3으로 인해 인접 이웃 그룹 D, E가 있습니다 (모든 그룹에서 code_3이 4 임).
내가 시도한 것은 각 코드에 대해 다음과 같이 일치 항목을 기반으로 첫 번째 열 (그룹)을 하위 설정합니다.
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
이 "kinda"는 작동하지만 더 많은 데이터 테이블 종류가 있다고 가정합니다. 나는 시도했다
groups[, code_1_match_2 := list(group[code_1 == groups$code_1])]
그러나 이것은 작동하지 않습니다.
처리 할 명확한 데이터 테이블 트릭이 누락 되었습니까?
이상적인 사례 결과는 다음과 같습니다 (현재 3 열 모두에 내 방법을 사용한 다음 결과를 연결해야 함).
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
것이 좋습니다. 정말 흥미로울 수 있습니다.