2013-07-04 7 views
5

मेरे पास आर में वेक्टर है जिसमें कम से कम 50,000 वास्तविकताएं हैं। मूल्यों को छोटे से बड़े से आदेश दिया जाता है और अब मुझे इस वेक्टर को विभिन्न वैक्टरों में विभाजित करने की आवश्यकता है। वेक्टर को विभाजित किया जाना चाहिए जब दो संख्याओं के बीच का अंतर किसी दिए गए नंबर से बड़ा होता है (दो कहें)।आर, अज्ञात सूचकांक पर विभाजित वेक्टर

उदाहरण के लिए,

data <- c(1,1.1, 1.2, 4, 4.2, 8, 8.9, 9, 9.3); 
# Then I need the following vectors: 
x1 <- c(1, 1.1, 1.2); 
x2 <- c(4, 4.2); 
x3 <- c(8, 8.9, 9, 9.3); 

कठिनाई यह है कि हम जरूरत वैक्टर की संख्या पता नहीं है और फोरहैंड पर प्रत्येक वेक्टर की लंबाई नहीं जानता है।

अब मेरे पास निम्नलिखित विचार है, हालांकि यह बहुत समय ले रहा है और यह केवल वेक्टर को दो नए वैक्टरों में विभाजित करने में सक्षम है।

j <- 2; 
seqDemA1 <- seqDemandA[1]; 
while((seqDemandA[j-1] - seqDemandA[j] < 2) && (j < length(seqDemandA)+1)) { 
    seqDemA1 <- c(seqDemA1, seqDemandA[j]); 
    j <- j+1; 
} 
seqDemA2 <- seqDemandA[j]; 
j <- j+1; 
while((seqDemandA[j-1] - seqDemandA[j] < 2) && (j < length(seqDemandA)+1)) { 
    seqDemA2 <- c(seqDemA2, seqDemandA[j]); 
    j <- j+1; 
} 

मैं आपकी मदद के लिए तत्पर हूं!

+0

क्या जब आपके पास कई संभव विभाजन अंक (यानी कई बिंदुओं देखते हैं जहां लगातार संख्या के बीच का अंतर 2 से अधिक है) लगता है ऐसा माना जाता है? –

उत्तर

7

इस प्रयास करें,

split(data, cumsum(c(0, diff(data)>=2))) 
+0

यह वही है जो मैं खोज रहा हूं, बढ़िया! कभी सोचा नहीं कि यह इतना आसान होना चाहिए। इसके अलावा, मुझे एक ही वेक्टर को उसी इंडेक्स में विभाजित करना पड़ा। सरल समाधान: वाई 1 <- विभाजन (एक्स, cumsum (सी (0, diff (x)> = 2))); वाई 2 <- विभाजन (जेड, cumsum (सी (0, diff (x)> = 2))); – Michiel

संबंधित मुद्दे