मेरे पास एक डेटा है ।
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
मैं क्या हासिल करना चाहूंगा, प्रत्येक समूह के लिए उपलब्ध कोड के आधार पर तत्काल पड़ोसियों को ढूंढना है। उदाहरण के लिए: Group A में तत्काल पड़ोसी समूह B है, C के कारण code_1 (code_1 सभी समूहों में 2 के बराबर है) और उनके पास तत्काल पड़ोसी समूह D, E है, जिसके कारण code_3 (कोड_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
यह "थोड़े" काम करता है, लेकिन मुझे लगता है कि ऐसा करने का एक अधिक डेटा टेबल प्रकार है। मैंने कोशिश की
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
, यह वास्तव में दिलचस्प हो सकता है।