2010-10-11 26 views
6

में एनएएस को फिर से सम्मिलित करना मेरे पास मूल्यों का वेक्टर है जिसमें एनएएस शामिल हैं। मूल्यों को बाहरी प्रोग्राम द्वारा संसाधित करने की आवश्यकता होती है जो एनएएस को संभाल नहीं सकता है, इसलिए उन्हें बाहर निकाला जाता है, इसे एक फ़ाइल में लिखा जाता है, संसाधित किया जाता है, फिर वापस पढ़ा जाता है, जिसके परिणामस्वरूप गैर-एनएएस की संख्या की लंबाई होती है । उदाहरण, मान लीजिए कि इनपुट 7 3 4 एनए 5 4 6 एनए 1 एनए है, तो आउटपुट सिर्फ 7 मान होगा। मुझे क्या करना है स्थिति में एनएएस दोबारा डालें।एक वेक्टर

तो, दिए गए दो वैक्टर एक्स और वाई:

> X 
[1] 64 1 9 100 16 NA 25 NA 4 49 36 NA 81 
> Y 
[1] 8 1 3 10 4 5 2 7 6 9 

उपज:

8 1 3 10 4 NA 5 NA 2 7 6 NA 9 

(आप देख सकते हैं कि एक्स वाई^2 है, सिर्फ एक उदाहरण के लिए thats)।

मैं यह करने के एक समारोह के बाहर दस्तक सकता है, लेकिन मुझे आश्चर्य है कि मौजूद है या कर रही है यह ... विभाजन, सूची, लंबाई ... हममम के किसी भी अच्छा धोखेबाज तरीके ...

+0

हालांकि सिर्फ उदाहरण के लिए, आप का प्रयास किया: sqrt (एक्स) –

उत्तर

3

एक ही विषय

rena <- function(X,Z){ 
    X[which(!is.na(X))]=Z  
    X 
} 

आर पर एक और प्रकार स्वचालित रूप से लागू नहीं के साथ आराम भरता है।

संपादित करें: मरेक द्वारा सुधारित।

+1

गलत: 'रेना (सी (1,2, एनए), सी (10,20))'। 'वाई' से परेशान क्यों करें, 'एक्स' का उपयोग करें जैसा कि स्पेसस्डैन उत्तर पर मेरी टिप्पणी है। – Marek

+0

@ मरेक: अच्छी पकड़। सुधार के लिए Thx। –

4

उत्तर देना मेरे अपने प्रश्न शायद है बहुत बुरा रूप है, लेकिन मुझे लगता है कि यह शायद neatest बारे में है: तो आप इस्तेमाल कर सकते हैं कि पता है, जहां लापता मूल्यों डाल करने के लिए

rena <- function(X,Z){ 
Y=rep(NA,length(X)) 
Y[!is.na(X)]=Z  
Y 
} 
+1

'समारोह (एक्स, जेड) को छोटा किया जा सकता है {एक्स [is.na (एक्स) ] <- जेड; X} '। – Marek

+1

अपने स्वयं के प्रश्न का उत्तर वास्तव में अच्छा रूप है! – Contango

5

na.omit, मूल श्रृंखला में NA के स्थानों की एक विशेषता रखता है:

Y <- sqrt(na.omit(X)) 
Z <- rep(NA,length(Y)+length(attr(Y,"na.action"))) 
Z[-attr(Y,"na.action")] <- Y 
#> Z 
# [1] 8 1 3 10 4 NA 5 NA 2 7 6 NA 9 
4

भी बदलने के प्रयास कर सकते हैं:

replace(X, !is.na(X), Y) 
+0

+1 अब तक का सबसे साफ समाधान है। –