【问题标题】:Split vector at unknown index在未知索引处拆分向量
【发布时间】:2013-07-01 21:04:12
【问题描述】:

我在 R 中有一个向量,其中至少包含 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;
}

期待您的帮助!

【问题讨论】:

  • 当您找到多个可能的分割点(即有多个连续数字之间的差异大于2的点)时应该发生什么?

标签: r vector indexing split


【解决方案1】:

试试这个,

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

【讨论】:

  • 这正是我要找的,太好了!从来没有想过它应该那么容易。此外,我不得不在相同的索引处拆分另一个向量。简单的解决方案: y1 =2))); y2 =2)));
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-06-28
  • 1970-01-01
  • 2010-12-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多