मैंने एक कस्टम योग फ़ंक्शन किया है जो NA
एस को अनदेखा करता है जब तक कि सभी NA
नहीं हैं। जब मैं dplyr
में इसका उपयोग करता हूं तो यह अजीब परिणाम देता है और मुझे नहीं पता कि क्यों।dplyr रिटर्न में कस्टम योग फ़ंक्शन असंगत परिणाम
require(dplyr)
dta <- data.frame(year=2007:2013, rrconf=c(79, NaN ,474,2792,1686,3313,3456), enrolled=c(NaN,NaN,458,1222,1155,1906,2184))
sum0 <- function(x, ...){
# remove NAs unless all are NA
if(is.na(mean(x, na.rm=TRUE))) return(NA)
else(sum(x, ..., na.rm=TRUE))
}
dta %>%
group_by(year) %>%
summarize(rrconf=sum0(rrconf), enrolled=sum0(enrolled))
मुझे
Source: local data frame [7 x 3]
year rrconf enrolled
1 2007 79 NA
2 2008 NA NA
3 2009 474 TRUE
4 2010 2792 TRUE
5 2011 1686 TRUE
6 2012 3313 TRUE
7 2013 3456 TRUE
देता है इस मामले में यह केवल एक मान से अधिक संक्षेप किया जाता है, लेकिन एक से अधिक मान से अधिक हो सकता है गर्मियों में मेरी बड़ी आवेदन में। फ़ंक्शन को as.integer()
में फिक्स करना ठीक लगता है, लेकिन मैं आपको क्यों नहीं बता सका।
क्या यह इस समस्या के आसपास काम करने का सही तरीका है? क्या मुझे कुछ याद आ रही है?
> sessionInfo()
R version 3.1.0 (2014-04-10)
Platform: i386-w64-mingw32/i386 (32-bit)
locale:
[1] LC_COLLATE=English_United Kingdom.1252 LC_CTYPE=English_United Kingdom.1252
[3] LC_MONETARY=English_United Kingdom.1252 LC_NUMERIC=C
[5] LC_TIME=English_United Kingdom.1252
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] dplyr_0.2
loaded via a namespace (and not attached):
[1] assertthat_0.1 magrittr_1.0.1 parallel_3.1.0 Rcpp_0.11.2 tools_3.1.0
मुझे यकीन है कि अगर यह सबसे अच्छा तरीका है समारोह लिखना है नहीं कर रहा हूँ लेकिन वह पंक्ति यह जांचने के लिए है कि सभी मूल्य 'एनए हैं। तो 'sum0 (सी (एनए, 3, एनए))' रिटर्न 3, लेकिन 'sum0 (सी (एनए, एनए, एनए))' रिटर्न 'एनए '। – Tom
'योग (x, na.rm = ifelse (सभी (is.na (x)), गलत, सत्य)) 'काम? – rawr
'na.rm = T' का उपयोग करते समय' माध्य 'और 'sum' के बीच थोड़ा अलग व्यवहार है। यदि सभी 'एनए 'हैं,' मतलब 'रिटर्न' NaN' है, जबकि 'sum' रिटर्न 0. – Tom