से एनएएस के ब्लॉक कैसे छोड़ना चाहिए मेरे पास एक बहु स्तंभ कुंजी के साथ एक बड़ा आर data.table
है, जहां कुछ मूल्य कॉलम में कुछ NA शामिल हैं। मैं उन समूहों को हटाना चाहता हूं जो पूरी तरह से एक या अधिक मूल्य कॉलम में NA हैं, लेकिन पूरे समूह को अन्यथा रखें। कुंजी के प्रत्येक कॉलम के लिए इसे दोहराएं।मुझे आर डेटाटेबल
- श्रृंखला:: एक, डी, ई, एच और एल
- पहचान:
library(data.table) DT = data.table( Series = rep(letters[1:12], each = 3), Id = 1:12, Value1 = c(1:3, NA, 5:9, rep(NA,3), 1:3, NA, 5:9, rep(NA,3), 1:3, NA, 5:9, rep(NA,3)), Value2 = c(rep(NA,3), 1:4, NA, 6:9, rep(NA,3), 1:9, 1:9, rep(NA,3))) DT Series Id Value1 Value2 1: a 1 1 NA 2: a 2 2 NA 3: a 3 3 NA 4: b 4 NA 1 5: b 5 5 2 6: b 6 6 3 7: c 7 7 4 8: c 8 8 NA 9: c 9 9 6 10: d 10 NA 7 11: d 11 NA 8 12: d 12 NA 9 13: e 1 1 NA 14: e 2 2 NA 15: e 3 3 NA 16: f 4 NA 1 17: f 5 5 2 18: f 6 6 3 19: g 7 7 4 20: g 8 8 5 21: g 9 9 6 22: h 10 NA 7 23: h 11 NA 8 24: h 12 NA 9 25: i 1 1 1 26: i 2 2 2 27: i 3 3 3 28: j 4 NA 4 29: j 5 5 5 30: j 6 6 6 31: k 7 7 7 32: k 8 8 8 33: k 9 9 9 34: l 10 NA NA 35: l 11 NA NA 36: l 12 NA NA Series Id Value1 Value2
तो मैं छोड़ने के लिए करना चाहते हैं:
एक सरल उदाहरण के लिए 4, 10,
: 11 और 12
सही परिणाम की तरह दिखना चाहिए
Series Id Value1 Value2
1: b 5 5 2
2: b 6 6 3
3: c 7 7 4
4: c 8 8 NA
5: c 9 9 6
6: f 5 5 2
7: f 6 6 3
8: g 7 7 4
9: g 8 8 5
10: g 9 9 6
11: i 1 1 1
12: i 2 2 2
13: i 3 3 3
14: j 5 5 5
15: j 6 6 6
16: k 7 7 7
17: k 8 8 8
18: k 9 9 9
Series Id Value1 Value2
क्या मैं अब तक कामयाब रहे:
मैं श्रृंखला है कि इस तरह मान 1 के लिए लागू नहीं कर रहे हैं पा सकते हैं:
DT[, sum(1-is.na(Value1)) == 0, by = Series][V1 == TRUE]
और मैं भी कर सकता है
setkey(DT, Series)
DT = DT[DT[, sum(1-is.na(Value)) == 0, by = Series][V1 != TRUE]]
लेकिन अब मैं अंतिम तालिका में दिखाई देने वाले वी 1 के साथ समाप्त होता हूं।
क्यों न सिर्फ 'na.omit (डीटी)' के साथ एक स्तंभ मान है कि छोड़ देंगे? – Justin
'na.omit' सिर्फ सभी एनएएस को हटा रहा है। मैं केवल तब हटाना चाहता हूं जब संपूर्ण "ब्लॉक" NA हो। तो उदाहरण में, एम या जेड के लिए कोई मूल्य नहीं है, इसलिए उन्हें छोड़ दिया जाना चाहिए, लेकिन मैं सीरीज बी – Corone
में दो एनएएस ड्रॉप नहीं करना चाहता हूं तो @ अरुण का आपका जवाब है, लेकिन आपको ' .logical'। – Justin