में लगी हुई समूह में मिलान करें मैं एक नया कॉलम बनाने की कोशिश कर रहा हूं जो इंगित करता है कि पिछले समूह में कोई आईडी मौजूद थी या नहीं। यहां मेरा डेटा है:डेटा.table
data <- data.table(ID = c(1:3, c(9,2,3,4),c(5,1)),
groups = c(rep(c("a", "b", "c"), c(3, 4,2))))
ID groups
1: 1 a
2: 2 a
3: 3 a
4: 9 b
5: 2 b
6: 3 b
7: 4 b
8: 5 c
9: 1 c
मुझे यकीन नहीं है कि कैसे लगी हुई समूहों को निर्दिष्ट करना है। मैं shift
का उपयोग करने की कोशिश की, लेकिन यह काम नहीं कर रहा:
data[,.(ID=ID,match_lagged=ID %in% shift(ID)),by=groups]
यहाँ मेरी वांछित परिणाम है।
पहली 3 लाइनें मेल नहीं खाती हैं क्योंकि कोई पिछला समूह नहीं है। इन तीन पंक्तियों के लिए गलत काम भी करेगा। आईडी = 4 (समूह बी में) समूह ए में मेल नहीं खाता है। आईडी = 5 (समूह सी में) समूह बी में मेल नहीं खाता है।
ध्यान दें कि समूह सी में आईडी 1 समूह बी में मेल नहीं खाता है, इसलिए यह समूह में मौजूद होने पर भी गलत होना चाहिए। यही कारण है कि duplicated(data$ID)
काम नहीं करता है। किसी समूह से डेटा पिछले समूह से मेल खाना चाहिए।
groups ID match_lagged
1: a 1 NA
2: a 2 NA
3: a 3 NA
4: b 9 FALSE
5: b 2 TRUE
6: b 3 TRUE
7: b 4 FALSE
8: c 5 FALSE
9: c 1 FALSE
ए dplyr
समाधान भी काम करेगा।
'डुप्लीकेट (डेटा $ आईडी)' काम नहीं करता है? –
@ डी.बी. नहीं, एक समूह से डेटा ** पिछले ** समूह से मेल खाना चाहिए। मैंने इस सवाल को संपादित किया कि यह क्यों स्पष्ट है कि 'डुप्लिकेट' क्यों काम नहीं करता है। –