मैं उन स्तंभों की संख्या गिनने की कोशिश कर रहा हूं जिनमें प्रत्येक पंक्ति के लिए NA शामिल नहीं है, और उस पंक्ति को उस पंक्ति के लिए एक नए कॉलम में रखें।आर: डेटा.table गिनती! NA प्रति पंक्ति
उदाहरण डेटा:
a b c num_obs
1: 1 6 11 3
2: 2 NA 12 2
3: 3 8 NA 2
4: 4 9 14 3
5: NA 10 15 2
मैं घंटों के लिए अभी पढ़ रहा है:
library(data.table)
a = c(1,2,3,4,NA)
b = c(6,NA,8,9,10)
c = c(11,12,NA,14,15)
d = data.table(a,b,c)
> d
a b c
1: 1 6 11
2: 2 NA 12
3: 3 8 NA
4: 4 9 14
5: NA 10 15
मेरे वांछित आउटपुट एक नया स्तंभ num_obs
जो गैर एनए प्रविष्टियों प्रति पंक्ति की संख्या में शामिल हैं को शामिल किया जाएगा और अब तक का सबसे अच्छा मैं पंक्तियों पर लूपिंग कर रहा हूं, जो मुझे पता है आर या डेटा.table में कभी सलाह नहीं दी जाती है। मुझे यकीन है कि ऐसा करने का एक बेहतर तरीका है, कृपया मुझे प्रबुद्ध करें।
मेरे भद्दा तरीका:
len = (1:NROW(d))
for (n in len) {
d[n, num_obs := length(which(!is.na(d[n])))]
}
'डी [, num_obs: = sum (! Is.na (.SD)) की तरह, = 1: nrow (d)] []' या 'd [, num_obs: = rowSums (! Is.na (d))] [] '? (सुनिश्चित नहीं है कि कौन तेज़ होगा।) – A5C1D2H2I1M1N2O1R2T1
हाँ! यह काम किया। क्या आप इसे समझा सकते हैं? मैंने सोचा था। अगर मैं '1 = 1: nrow (d)' का उपयोग करता हूं तो एसडी पूरे डेटासेट के बराबर होगा। यह कैसे है कि यह पंक्ति से करता है? संपादित करें: भी, खाली श्रृंखला '[] 'क्या जोड़ता है? – Reilstein