2013-02-24 3 views
7

जोड़ते समय केवल शून्य के रूप में व्यवहार करें, जब दो डेटा तालिकाओं की गणना की जाती है, NA+n=NAकोई संख्या

Name 1 2 
1: Joe 0 5 
2: Ann NA 3 

यह कैसे आर में किया जाता है:

> dt1 <- data.table(Name=c("Joe","Ann"), "1"=c(0,NA), "2"=c(3,NA)) 
> dt1 
    Name 1 2 
1: Joe 0 3 
2: Ann NA NA 
> dt2 <- data.table(Name=c("Joe","Ann"), "1"=c(0,NA), "2"=c(2,3)) 
> dt2 
    Name 1 2 
1: Joe 0 2 
2: Ann NA 3 
> dtsum <- rbind(dt1, dt2)[, lapply(.SD, sum), by=Name] 
> dtsum 
    Name 1 2 
1: Joe 0 5 
2: Ann NA NA 

मैं सभी एनए के 0. साथ स्थानापन्न करने मैं क्या चाहता हूँ NA+NA=NA और NA+n=n निम्नलिखित परिणाम प्राप्त करने के लिए है नहीं करना चाहती?

अद्यतन: DT1 में निकाली गई टाइपो

+0

यदि आप अपने पिछले प्रश्न से लिंक करते हैं, तो लोग बेहतर समझ सकते हैं कि आप क्या उम्मीद कर रहे हैं mplish और बेहतर मदद प्रदान कर सकते हैं। http://stackoverflow.com/questions/15044342/sum-of-hybrid-data-frames-depending-on-multiple-conditions-in-r –

+0

मैंने यहां समस्या को अलग कर दिया है। दूसरा सवाल अब हल हो गया है। –

उत्तर

10

आप अपनी खुद की समारोह आप चाहते हैं के रूप में कार्य करने के लिए परिभाषित कर सकते हैं याद करने के लिए बहुत उपयोगी है

plus <- function(x) { 
if(all(is.na(x))){ 
    c(x[0],NA)} else { 
    sum(x,na.rm = TRUE)} 
} 


rbind(dt1, dt2)[,lapply(.SD, plus), by = Name] 
+0

(+1) 'x [0]' के साथ साफ चाल! अगली बार इसे याद रखेगा। – Arun

+1

आप 'as (NA, class (x))' का उपयोग भी कर सकते हैं, मैंने यह देखने के लिए बेंचमार्क नहीं किया है कि कौन तेज़ होगा। – mnel

+0

@ आर-ओबर्ट, यहां कानेल का कार्य बहुत अच्छा है। आप इसे अपने पिछले प्रश्न में सही तरीके से रख सकता है, बस 'sum' को 'डीटीएसम <- ...' और' sumD3D4 <- ... ' –

4
dtsum <- rbind(dt1, dt2)[, lapply(.SD, function(x) ifelse(all(is.na(x)), as.numeric(NA), sum(x, na.rm=T))), by=Name] 

(@ अरुण के सुझाव भी शामिल है) na.rm=TRUE

+0

क्षमा करें, बस एहसास हुआ कि यह 'NA + NA = 0' देगा, जो मुझे नहीं लगता कि आप – alexwhan

+0

चाहते हैं कि ओपी गणना न करें 'एनए + एनए' (जिस तरह से 'डीटी 1' और' डीटी 2' परिभाषित किया गया है (वे कैसे दिखाए जाते हैं) ' – mnel

+0

@mnel ने –

संबंधित मुद्दे