दिलचस्प पोस्ट
json में फ़ंक्शन पास करें और निष्पादित करें सीएसएस रूपांतरण इनलाइन तत्वों पर काम नहीं करता है पॉइंटर को नल को क्यों हटाए नहीं? कचरा कलेक्टर कॉल निपटान करता है ()? फ़ॉर्म लोड अपवाद क्यों नहीं पकड़े? ग्रहण अधिष्ठापन त्रुटि: INSTALL_FAILED_UID_CHANGED हैस्केल: का मामला करते हैं टर्मिनल में गीट का पेड़ दिखाने में असमर्थ Codeigniter – एकाधिक डेटाबेस का उपयोग करना एंड्रॉइड किटकैट में अपना एसएमएस ऐप डिफ़ॉल्ट कैसे सेट करें? QueryPerformanceCounter का उपयोग कैसे करें? नोड- http-proxy के साथ vhosts का उपयोग कैसे करें? "अर्रेएडप्टर को संसाधन आईडी को एक टेक्स्टव्यू होना चाहिए" XML समस्याएं मैं एमके एन्नेटेशन दृश्य ड्रॉप कैसे बदलूं? जावास्क्रिप्ट सेट टाइमआउट बहुत गलत क्यों है?

एक वेक्टर के भीतर डेटा का प्रचार करना

मैं आर सीख रहा हूँ और मैं उत्सुक हूँ … मुझे ऐसा फ़ंक्शन चाहिए जो यह करता है:

> fillInTheBlanks(c(1, NA, NA, 2, 3, NA, 4)) [1] 1 1 1 2 3 3 4 > fillInTheBlanks(c(1, 2, 3, 4)) [1] 1 2 3 4 

और मैंने इसे एक का उत्पादन किया … लेकिन मुझे संदेह है कि ऐसा करने का एक और रास्ता है।

 fillInTheBlanks <- function(v) { ## replace each NA with the latest preceding available value orig <- v result <- v for(i in 1:length(v)) { value <- v[i] if (!is.na(value)) result[i:length(v)] <- value } return(result) } 

Solutions Collecting From Web of "एक वेक्टर के भीतर डेटा का प्रचार करना"

पैकेज zoo में एक समारोह है na.locf() :

 R> library("zoo") R> na.locf(c(1, 2, 3, 4)) [1] 1 2 3 4 R> na.locf(c(1, NA, NA, 2, 3, NA, 4)) [1] 1 1 1 2 3 3 4 

na.locf : अंतिम अवलोकन आगे चलाया; प्रत्येक 'एनए' को बदलने के लिए जेनेरिक फ़ंक्शन, इससे पहले सबसे हाल ही में गैर- 'एनए' के ​​साथ।

na.locf.default फ़ंक्शन के स्रोत कोड को देखें, इसके लिए na.locf.default आवश्यकता नहीं है।

मैं चिड़ियाघर पुस्तकालय से कुछ न्यूनतम कॉपी और पेस्ट कर रहा हूं (मुझे फिर से इस पर इशारा करने के लिए धन्यवाद) और यह वही है जो मुझे वास्तव में जरूरी है:

 fillInTheBlanks <- function(S) { ## NA in S are replaced with observed values ## accepts a vector possibly holding NA values and returns a vector ## where all observed values are carried forward and the first is ## also carried backward. cfr na.locf from zoo library. L <- !is.na(S) c(S[L][1], S[L])[cumsum(L)+1] } 

बस मज़ा के लिए (क्योंकि यह fillInTheBlanks की तुलना में धीमी है), यहाँ rle समारोह पर निर्भर na.locf का एक संस्करण है:

 my.na.locf <- function(v,fromLast=F){ if(fromLast){ return(rev(my.na.locf(rev(v)))) } nas <- is.na(v) e <- rle(nas) v[nas] <- rep.int(c(NA,v[head(cumsum(e$lengths),-1)]),e$lengths)[nas] return(v) } 

जैसे

 v1 <- c(3,NA,NA,NA,1,2,NA,NA,5) v2 <- c(NA,NA,NA,1,7,NA,NA,5,NA) my.na.locf(v1) #[1] 3 3 3 3 1 2 2 2 5 my.na.locf(v2) #[1] NA NA NA 1 7 7 7 5 5 my.na.locf(v1,fromLast=T) #[1] 3 1 1 1 1 2 5 5 5 my.na.locf(v2,fromLast=T) #[1] 1 1 1 1 7 5 5 5 NA 

एक और सरल जवाब। यह एक पहले मूल्य की देखभाल करता है NA एक मरा हुआ अंत होता है, इसलिए मेरी लूप इंडेक्स 2 से आंकड़े

 my_vec <- c(1, NA, NA, 2, 3, NA, 4) fill.it <- function(vector){ new_vec <- vector for (i in 2:length(new_vec)){ if(is.na(new_vec[i])) { new_vec[i] <- new_vec[i-1] } else { next } } return(new_vec) }