2015-11-18 10 views
5

मैं एक उदाहरण के रूप में निम्नलिखित data.frame का उपयोग देता है। चूंकि x का कोई सामान्य मान नहीं है, इसलिए मैं समेकन की अपेक्षा करता हूं कि मुझे केवल मूल डेटा दें। वापस लौटें, जहां एनए को समूह के रूप में माना जाता है। लेकिन एकत्रीकरण मुझे निम्नलिखित परिणाम देता है।सकल अप्रत्याशित जवाब

>aggregate(y ~ x, data=d, FUN=sum) 
    x y 
1 1 2 

मैंने na.action की डिफ़ॉल्ट कार्रवाइयों को बदलने के बारे में प्रलेखन पढ़ा है, लेकिन ऐसा लगता है कि मुझे कुछ सार्थक नहीं लगता है।

>aggregate(y ~ x, data=d, FUN=sum, na.action=na.pass) 
    x y 
1 1 2 

क्या चल रहा है? मुझे समझ में नहीं आता कि इस मामले में na.pass क्या कर रहा है। क्या आर में जो चाहते हैं उसे पूरा करने का कोई विकल्प है? किसी भी तरह की सहायता का स्वागत किया जाएगा।

+2

आप कह रहे हैं कि आप समूहकरण चर के रूप में 'NA' मान पर विचार कर रहे हैं? क्या आप 'एनए 'चाहते हैं या नहीं? (यह स्पष्ट नहीं है क्योंकि आप अपने परीक्षण के हिस्से के रूप में 'na.rm = TRUE' का भी उपयोग कर रहे हैं .... – A5C1D2H2I1M1N2O1R2T1

+0

हां, मैं एनए को समूह के रूप में चाहता हूं। – Sanias

+0

प्रलेखन कहता है "किसी भी में गुम मूल्यों वाली पंक्तियां परिणाम से वैरिएबल छोड़े जाएंगे। "यदि आप यह नहीं चाहते हैं, तो आपको अपने 'by' variable को रिकोड करना होगा या एकत्रीकरण के लिए एक अलग फ़ंक्शन का उपयोग करना होगा। – Roland

उत्तर

7

aggregatetapply का उपयोग करता है, जो बदले में इसके समूह चर पर factor का उपयोग करता है।

लेकिन, क्या factor में NA मूल्यों के साथ होता है पर नज़र डालें:

factor(c(1, 2, NA)) 
# [1] 1 2 <NA> 
# Levels: 1 2 

नोट levels। आप NA रखने के लिए addNA का उपयोग कर सकते:

aggregate(y ~ addNA(x), d, sum) 
# addNA(x) y 
# 1  1 2 
# 2  <NA> 3 

या की तरह कुछ:

d$x <- addNA(factor(d$x)) 
str(d) 
# 'data.frame': 2 obs. of 2 variables: 
# $ x: Factor w/ 2 levels "1",NA: 1 2 
# $ y: num 2 3 
aggregate(y ~ x, d, sum) 
#  x y 
# 1 1 2 
# 2 <NA> 3 

addNA(factor(c(1, 2, NA))) 
# [1] 1 2 <NA> 
# Levels: 1 2 <NA> 

इस प्रकार, आप शायद की तरह कुछ करने के लिए की आवश्यकता होगी (वैकल्पिक रूप से, "data.table" जैसे कुछ अपग्रेड करें, जो कि तेज़ नहीं होगा n aggregate, लेकिन यह आपको NA मानों के साथ और अधिक संगत व्यवहार भी देगा। using the formula method of aggregate or not पर ध्यान देने की आवश्यकता नहीं है।)

library(data.table) 
as.data.table(d)[, sum(y), by = x] 
#  x V1 
# 1: 1 2 
# 2: NA 3 
+0

धन्यवाद, मैं इसकी सराहना करता हूं। मैं na की कार्यक्षमता के बारे में उत्सुक हूं। पास करें। प्रलेखन का कहना है कि यह "ऑब्जेक्ट को अपरिवर्तित करता है।" तो एनए को क्यों हटाया जा रहा है? – Sanias

+0

@ सियाना, जो स्तंभों के संदर्भ में है, कॉलम के अनुसार नहीं। – A5C1D2H2I1M1N2O1R2T1

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