一个新手的问题:我想将一个向量分成三个不同长度的向量,并将每个向量中的值随机分配。例如,我想将下面长度为12的向量分成长度为2、3和7的向量。
我可以使用以下方法得到三个相等大小的向量:
我可以使用以下方法得到三个相等大小的向量:
test<-1:12
split(test,sample(1:3))
有没有关于如何把测试分成长度为2、3和7的向量,而不是三个长度为4的向量的建议?
test<-1:12
split(test,sample(1:3))
有没有关于如何把测试分成长度为2、3和7的向量,而不是三个长度为4的向量的建议?
rep
创建每个组的索引,然后根据这些索引进行拆分。split(1:12, rep(1:3, c(2, 3, 7)))
如果你希望这些项目被随机分配,以便不仅是第一个向量中的前两个项目,第二个向量中的下一个三个项目,...,那么你可以添加调用sample
。
split(1:12, sample(rep(1:3, c(2, 3, 7))))
如果你没有想到具体的长度(2、3、7),只是不想每次得到等长的向量,那么SimonO101的回答就是正确的方式。
使用sample
有什么不同的方法呢?...
set.seed(123)
test<-1:12
split( test , sample(3, 12 , repl = TRUE) )
#$`1`
#[1] 1 6
#$`2`
#[1] 3 7 9 10 12
#$`3`
#[1] 2 4 5 8 11
set.seed(1234)
test<-1:12
split( test , sample(3, 12 , repl = TRUE) )
#$`1`
#[1] 1 7 8
#$`2`
#[1] 2 3 4 6 9 10 12
#$`3`
#[1] 5 11
sample
的第一个参数是把向量分成几组。第二个参数是向量的元素个数。这将随机地将每个连续的元素分配到三个向量之一。如果要分成四个向量,只需执行 split( test , sample(4, 12 , repl = TRUE) )
。
比你想象的更容易。要将向量分成三个新的随机选择集,请运行以下代码:
test <- 1:12
split(sample(test), 1:3)
> split(sample(test), 1:3)
$`1`
[1] 5 8 7 3
$`2`
[1] 4 1 10 9
$`3`
[1] 2 11 12 6
> split(sample(test), 1:3)
$`1`
[1] 12 6 4 1
$`2`
[1] 3 8 7 5
$`3`
[1] 9 2 10 11
你可以使用辅助向量来格式化你想要分割数据的方式。例如:
Data <- c(1,2,3,4,5,6)
Format <- c("X","Y","X","Y","Z,"Z")
output <- split(Data,Format)
将生成输出:
$X
[1] 1 3
$Y
[1] 2 4
$Z
[1] 5 6
split(sample(1:12), rep(1:3, c(2, 3, 7)))
。先排列再分割。但最终结果似乎是一样的。我不喜欢你的方法似乎会保持样本的顺序。 - IRTFM