按照某个数字的倍数分割向量

3

我想将一个向量按照一个数字的倍数进行分割,例如给出向量 c(1:100),我希望得到以下向量:

c(1,11,21,31,41,51,61,71,81,91) 
c(2,12,22,32,42,52,62,72,82,92) 
..... 
c(10,20,30,40,50,60,70,80,90,100)

请注意,我希望向量c(1,11,21,31,41,51,61,71,81,91)成为新向量列表中的第一个,因为我知道split(1:100,1:100 %% 10)[1]是c(10,20,30,40,50,60,70,80,90,100),而这不是我想要的。
编辑: 1:100的示例只是一个示例。在我的应用程序中,我想要将256个数字的向量(不是从1到256的随机数字)分成16个新向量...

4
也许是 split(1:100,1:100 %% 10)?该函数的作用是将数字1到100分割成十个长度相等的组。 - joran
@joran,作为答案发布还是找到重复项?(我知道,发布答案更容易...) - Ben Bolker
我尝试过,但第一个新向量是10、20、30等。因此,split(1:100,1:100 %% 10)[1] = c(10,20............)。我希望前10个中的第一个是1、11、21.....,最后一个是10、20.30.... - heisenberg7584
可能有更好的方法,但是split(1:100,((1:100 %% 10) -1) %% 10)可以给出你想要的顺序。 - Chris
1
更好的写法:split(1:100,0:99 %% 10) - Chris
谢谢@Chris,解决方案split(1:100,0:99 %% 10)非常完美。 - heisenberg7584
3个回答

2
听起来你想使用split(1:100,1:100 %% 10)。一些排序选项包括:
x <- split(1:100,1:100 %% 10)
c(tail(x,-1),head(x,1))

或者从上面的评论中看到,
split(1:100,((1:100 %% 10) -1) %% 10)

0

这比Joran的答案更丑陋,但你也可以在循环中执行此操作,并使用grep()提取以特定值结尾的数字:

yourlist <- vector("list", 10)

for (i in 1:10) {
  yourlist[[i]] <- grep(paste0(i %% 10, "$"), 1:100)
}

0

正如评论中所述,完美的选择是将其做成这样:

split(1:100,0:99 %% 10) 

在这种情况下,我们可以使它真正通用,如下所示:
split(vec, 0:(length(vec)-1) %% X)

其中vec是我们想要除以的向量,X是您的重复次数


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接