2011-08-18 7 views
5

मैं एक रिश्तेदार आर नोब हूं।कंडीशनर मूविंग मैक्स

  Tempadjvolt  newmass  rgdeltas 
2794  498.5777 0.5355647187 0.00000000 
2795  499.7577 0.5355647187 0.00000000 
2796  500.7877 0.3415104788 -2.87487763 
2797  502.1177 0.4312854788 -1.54487763 
2798  500.3877 0.5355647187 0.00000000 
2799  502.5377 0.4596354788 -1.12487763 
2800  507.6877 0.8072604788 4.02512237 
2801  505.2577 0.6432354788 1.59512237 
2802  505.7977 0.6796854788 2.13512237 
2803  517.8877 1.4957604788 14.22512237 
2804  502.2477 0.4400604788 -1.41487763 
2805  507.3677 0.7856604788 3.70512237 
2806  519.7277 1.6199604788 16.06512237 
2807  528.9377 2.2416354788 25.27512237 
2808  520.2677 1.6564104788 16.60512237 
2809  519.3877 0.5355647187 0.00000000 
2810  526.5677 2.0816604788 22.90512237 
2811  519.5377 0.5355647187 0.00000000 
2812  526.9277 2.1059604788 23.26512237 
2813  529.9877 2.3125104788 26.32512237 
2814  514.4077 1.2608604788 10.74512237 
2815  518.3777 1.5288354788 14.71512237 

मैं नकारात्मक rgdeltas मूल्यों की पहचान के लिए कोशिश कर रहा हूँ [उदाहरण के लिए, पंक्ति 2804] और फिर 'नज़र' 7 पदों के पीछे और आगे:

मैं एक बड़ी डाटासेट कि कुछ इस तरह दिखता है उच्चतम Tempadjvolt खोजने के लिए और उस स्थानीय अधिकतम पर 2804 के tempadjvolt पंक्ति सेट करें।

फ्रेम ~ 4000 पंक्तियां लंबी है, जिनमें से ~ 515 नकारात्मक मान हैं। मैंने लूप के लिए एक जोड़े की कोशिश की जो सॉर्टा काम करता था ... लेकिन एनएएस का एक समूह भी थूकता है - जो मुझे लगता है कि वे खराब/अनुचित रूप से निर्मित थे।

किसी भी सहायता की सराहना की जाएगी।

जैसा टिप्पणियों में बताया गया था, मूल पोस्ट अस्पष्ट था। मैं लगातार नकारात्मक rgdeltas मूल्यों के बारे में चिंतित नहीं हूँ। फ्रेम के सामने और अंत के 7 के भीतर नकारात्मक मानों के लिए, आदर्श रूप से लूप शुरुआत/अंत से पहले आगे और पीछे कई पदों को देखेगा। इस बिंदु पर उससे कम चिंता।

थोड़ा और पृष्ठभूमि: यह सिग्नल प्रोसेसिंग प्रोग्राम का हिस्सा है जो मूल रूप से सी # में लिखा गया है कि मैं पर्यावरण मॉनीटर से बड़ी संख्या में फाइल आउटपुट के कुछ और स्पष्ट बैच प्रोसेसिंग को बढ़ाने के लिए आर पर जाने का प्रयास कर रहा हूं। मैंने मूल कोड नहीं लिखा था और यह सामानों के एक बड़े सेट के केवल एक छोटा सा घटक है।

मैं सहायता की सराहना करता हूं। धन्यवाद!

+0

मुझे नहीं लगता कि प्रश्न एक स्पष्ट उत्तर नहीं है है। आपने एक प्रस्ताव की पेशकश नहीं की है कि क्या होता है यदि दो नकारात्मक मान एक दूसरे के 14 पदों के भीतर हैं, क्योंकि वे स्पष्ट रूप से कुछ मामलों में हैं। (... या शायद मैंने "बेसलाइन" पर रीसेट करने की धारणा को गलत समझा। –

+0

न ही आपने यह निर्दिष्ट किया है कि क्या होना चाहिए यदि ऋणात्मक मूल्य शुरुआत या अंत से 7 पंक्तियों से कम है। मुझे संदेह है कि यह आपके एनएएस का स्रोत हो सकता है – joran

+0

डविन, जोरन - धन्यवाद। मैंने उपरोक्त मेरे डेटा का एक खराब प्रतिनिधित्व पोस्ट किया है, जिसे मैं ठीक करने वाला हूं। मुझे एक दूसरे के विस्तार में दो या दो से अधिक नकारात्मक नहीं हैं।यदि मूल्य शुरुआत या अंत में है ... मैंने सोचा नहीं है। अस्पष्टता के बारे में माफ़ी, उम्मीद है कि एक मिनट में मेरे संपादन में मदद मिलेगी। –

उत्तर

4

मान लें कि इसके नाम dat है:

negidxs <- as.numeric(rownames(dat)[ dat[[3]] < 0 ]) 
for (i in negidxs){ 
     dat[as.character(i), "Tempadjvolt"] <- 
      max(dat[rownames(dat) %in% (i-7):(i+7), "Tempadjvolt"], na.rm=TRUE) } 
dat 
    #----------------------------------# 
    Tempadjvolt newmass rgdeltas 
2794 498.5777 0.5355647 0.000000 
2795 499.7577 0.5355647 0.000000 
2796 517.8877 0.3415105 -2.874878 
2797 517.8877 0.4312855 -1.544878 
2798 500.3877 0.5355647 0.000000 
2799 519.7277 0.4596355 -1.124878 
2800 507.6877 0.8072605 4.025122 
2801 505.2577 0.6432355 1.595122 
2802 505.7977 0.6796855 2.135122 
#snipped----- 
5

1) शून्य भरें। यह मानते हुए कि डेटा फ्रेम DF हम चिड़ियाघर पैकेज में rollapply का उपयोग चौड़ाई 15 की एक चलती खिड़की करने के लिए समारोह, f लागू होते हैं, करने के लिए कहा जाता है:

library(zoo) 
# columns of DF are (1) Tempadjvolt, (2) newmass and (3) rgdeltas 
f <- function(x) if (x[8, 3] < 0) max(x[, 1]) else x[8, 1] 
DF[[1]] <- rollapply(DF, 15, f, fill = 0, by.column = FALSE) 

ऊपर में हम शुरुआत के निकट अंक भरा है और शून्य के साथ समाप्त चूंकि ऐसा लगता है कि इससे निपटने का सटीक तरीका इतना महत्वपूर्ण नहीं है लेकिन हम कुछ अन्य भरे मूल्य का उपयोग कर सकते थे।

2) अंतिम मूल्य छोड़ दें। एक और संभावना केवल सिरों के पास नहीं अंक पर कार्रवाई करने के लिए है:

DF[seq(8, nrow(DF)-7), 1] <- rollapply(DF, 15, f, by.column = FALSE) 

3) partials। या हम partial = TRUE इस्तेमाल किया जा सकता था और फिर इस तरह सिरों के पास आंशिक मूल्यों का max ले:

f2 <- function(x) { 
     # Columns of DF2 are (1) Tempadjvolt, (2) newmass, (3) rgdeltas and (4) seq. 
     # Condition is TRUE if passed a partial x near the beginning. 
     # k is row index of current row in x. Normally 8 but near start it varies. 
     k <- if (x[1, 4] == 1) nrow(x) - 7 else 8 
     if (x[k, 3] < 0) max(x[, 1]) else x[k, 1] 
} 
DF2 <- cbind(DF, seq = 1:nrow(DF)) 
DF[[1]] <- rollapply(DF2, 15, f2, partial = TRUE, by.column = FALSE) 
संबंधित मुद्दे