2013-07-04 9 views
5

Mam wektor w R, który zawiera co najmniej 50 000 reali. Wartości są sortowane od małych do dużych, a teraz muszę podzielić ten wektor w różnych wektorach. Wektor musi zostać podzielony, gdy różnica między dwiema liczbami jest większa niż podana liczba (powiedzmy dwie).R, wektor podziału pod nieznanym indeksem

Przykład,

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); 

Trudność polega na tym, że nie znamy liczbę potrzebnych wektorach i nie wiem, długość każdego wektora w przodzie.

Teraz mam następujący pomysł, jednak jest to bardzo czasochłonne i jest tylko w stanie podzielić wektor na dwa nowe wektory.

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; 
} 

Z niecierpliwością czekam na Twoją pomoc!

+0

Co ma się wydarzyć, gdy znajdziesz wiele możliwych podzielone punktów (czyli istnieje wiele punktów, gdzie różnica pomiędzy kolejnymi numerami jest większy niż 2)? –

Odpowiedz

7

Spróbuj tego,

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

Dokładnie tego szukam, świetnie! Nigdy nie sądziłem, że to powinno być takie proste. Co więcej, musiałem podzielić kolejny wektor na ten sam indeces. Proste rozwiązanie: y1 <- split (x, cumsum (c (0, diff (x)> = 2))); y2 <- split (z, cumsum (c (0, diff (x)> = 2))); – Michiel

Powiązane problemy