आर

2013-04-24 9 views
6

में पिछले तीन मानों की औसत मूविंग औसत चिड़ियाघर पैकेज में रोलमेन नामक एक फ़ंक्शन है, जो आपको मूविंग एवरेज बनाने में सक्षम बनाता है। rollmean(x,3) नीचे दी गई तालिका में पिछले, वर्तमान और अगले मान (यानी 4, 6 और 2) ले जाएगा। यह दूसरे कॉलम में दिखाया गया है।आर

x rollmean ma3 
4  
6 4.0 
2 4.3 
5 3.0   4.0 
2 6.3   4.3 
12 6.0   3.0 
4 6.0   6.3 
2    6.0 

मैं वही काम करना चाहता हूं, लेकिन चौथी पंक्ति में पिछले 3 मानों का औसत से। यह तीसरे कॉलम में प्रदर्शित होता है। क्या कोई मुझे उस समारोह का नाम बता सकता है जो इसे पूरा करने में मदद करेगा?

+2

आप 'फिल्टर का उपयोग कर सकते (एक्स, प्रतिनिधि (1/3,3), पक्षों = 1)' – rinni

उत्तर

2

मैं औसत है कि मैं क्या जरूरत है ऐसा करने के लिए कुछ लचीलापन था बढ़ने के लिए एक सरल समारोह के लिए खोज संघर्ष किया। अंत में मैंने फ़िल्टर फ़ंक्शन पर आधारित एक जोड़े को विस्तारित किया जो कि रिनी टिप्पणी में ऊपर देता है (लेकिन जो स्वयं काम नहीं करेगा क्योंकि इसमें 3 अवधि औसत में वर्तमान अवलोकन शामिल होगा)।

  1. औसत समारोह है कि वर्तमान अवलोकन

    mav <- function(x,n){filter(x,rep(1/n,n), sides=1)} 
    
  2. शामिल औसत समारोह चलती है कि मौजूदा अवलोकन

    mavback <- function(x,n){ 
        a<-mav(x,1) 
        b<-mav(x,(n+1)) 
        c<-(1/n)*((n+1)*b - a) 
        return(c) 
    } 
    
  3. पिछड़ा शामिल नहीं है वर्तमान सहित नहीं औसत समारोह चलती देख, चलती [एच 2] रीडिंग शुरू होने पर [एच 2] रीडिंग के आधार पर,

    mavback1<-function(x,h1,h2){ 
        a<-mavback(x,h1) 
        b<-mavback(x,h1-h2) 
        c<-(1/h2)*(h1*a -(h1-h2)*b) 
        return(c) 
    } 
    
10

आप rollmean का उपयोग कर सकते हैं, लेकिन align='right' सेट करें। या आप rollmeanr का उपयोग कर सकते हैं, जिसमें align='right' डिफ़ॉल्ट है।

ma3 <- rollmeanr(x[,1],3,fill=NA) 

... लेकिन आपको अभी भी परिणाम को समाप्त करने की आवश्यकता होगी। एक अन्य समाधान width तर्क के लिए एक सूची के साथ rollapply उपयोग करने के लिए है:

ma3 <- rollapplyr(x[,1],list(-(3:1)),mean,fill=NA) 
0

उसकी MAV कार्य के आधार पर w_i_l_l के mavback समारोह का एक सरल कार्यान्वयन

mavback <- function(x,n){ filter(x, c(0, rep(1/n,n)), sides=1) }