【问题标题】:R split vector with jumps带跳跃的 R 分裂向量
【发布时间】:2025-12-25 11:30:16
【问题描述】:

我创建了具有以下结构的向量:

full_seq <- runif(10^8)

我想生成一个新向量,提取相同大小的样本。这对我来说很好:

full_splited <- split(full_seq, ceiling(seq_along(full_seq)/10^3))

现在,我需要以固定大小从一个块跳转到另一个块。让我们以 100 个数字的序列、10 个元素的样本和 4 个元素的跳跃来说明:

full_seq = 1 2 3 4 5 6 7 8 9 10 .. 100
full_splitted2 [1] = 1 2 3 4 5 6 7 8 9 10 
               [2] = 14 15 16 17 18 19 20 21 22 23 
               [3] = 27 28 29 30 31 32 33 34 35 36 
               [4] = 40 .. 49 
               [5] = 53 .. 62 
               [6] = 66 .. 75
               [7] = 79 .. 88

full_splited2 的第 8 个元素在 full_seq 的边界之外,并且没有成为拆分对象的成员。

我不知道这是否是更好的表示,但我尝试了一些解决方案但没有成功。

有什么帮助吗?

非常感谢。

【问题讨论】:

  • 什么是full_along
  • 如果您减少样本(10^8 似乎不是最小的),您可以为您的示例提供所需的输出,这将更容易提供帮助。另请注意,在使用随机数生成/采样时应使用set.seed(somenumber) 以使其可重现。
  • 如果我正确理解了您的问题,直觉上我会将您的向量重塑为一个矩阵(ncol 等于您的样本的所需大小),然后选择适当的行,但我不明白full_along 是什么以及你想要什么,所以...
  • @ztl 对不起,输入错误 seq_along 是对的...
  • @docendodiscimus 好的,我了解随机数生成的原理,我只是在这里复制我的问题部分。将序列拆分为 n 个相同大小的子序列,并按固定数量的元素从一个子序列跳到另一个子序列。即:10.

标签: r vector split


【解决方案1】:

这是你要找的吗?

full_seq <- 1:100 
mysize <- 10
myjump <- 4

myseq <- seq(from=1, to=length(full_seq), by=myjump+mysize-1)
full_splitted2 <- c()
for (i in myseq) {
  if ((i+mysize-1) <= length(full_seq)) {
    full_splitted2 <- c(full_splitted2, full_seq[i:(i+mysize-1)])
  }
}
full_splitted2 <- matrix(full_splitted2, ncol=mysize, byrow=TRUE)

full_splitted2:

[1,]    1    2    3    4    5    6    7    8    9    10
[2,]   14   15   16   17   18   19   20   21   22    23
[3,]   27   28   29   30   31   32   33   34   35    36
[4,]   40   41   42   43   44   45   46   47   48    49
[5,]   53   54   55   56   57   58   59   60   61    62
[6,]   66   67   68   69   70   71   72   73   74    75
[7,]   79   80   81   82   83   84   85   86   87    88

【讨论】:

  • 对不起,也许我没有说得那么清楚。让我再试着解释一下。因为我有一个 full_seq = 10^2、myze = 10 和 myjump = 3。目标是这样的序列:full_seq = 1 2 3 4 5 6 7 8 9 10 .. 100 full_splitted2 [1] = 1 2 3 4 5 6 7 8 9 10 [2] = 14 15 16 17 18 19 20 21 22 23 [3] = 27 28 29 30 31 32 33 34 35 36 [4] = 40 .. 49 [5] = 53 .. 62 [6] = 66 .. 75 [7] = 79 .. 88 第 8 个元素超出了 full_splitted2 的边界明白了吗?
  • 谢谢,你的问题现在真的更清楚了 ;-) 答案已改编 - 希望它有所帮助(可能会改进......)
  • 谢谢@ztl。你不介意它对我有什么帮助!真的很感谢。