2013-07-04 34 views
5

分裂向量我中的R的載體,其包含至少50.000實數。 值從小到大排列,現在我需要將這個向量分成不同的向量。當兩個數字之間的差異大於給定的數字(如兩個)時,矢量必須分開。R,在未知指數

實施例,

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

這正是我期待的,太棒了! 從來沒有想過它應該是那麼容易。 此外,我不得不在相同的indeces分裂另一向量。簡單的解決辦法: Y1 < - 分裂(X,cumsum(C(0,DIFF(X)> = 2))); Y2 < - 分裂(Z,cumsum(C(0,DIFF(X)> = 2))); – Michiel