来自相对n00b的问题:我想将一个向量分成三个不同长度的向量,其中的值随机分配给每个向量 . 例如,我想将长度为12的矢量分成长度为2,3和7的向量
我可以使用这个获得三个相等大小的向量:
test<-1:12 split(test,sample(1:3))
关于如何将测试分成2,3和7的矢量而不是3个长度为4的矢量的建议?
您可以使用 rep 为每个组创建索引,然后根据该分组进行拆分
rep
split(1:12, rep(1:3, c(2, 3, 7)))
如果你想让项目被随机分配,这样它不仅仅是第一个向量中的前两个项目,第二个向量中的下三个项目,......,你可以添加调用 sample
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 中的第一个参数是将矢量拆分为的组数 . 第二个参数是向量中的元素数 . 这将随机将每个连续元素分配到3个向量之一 . 对于4个向量,只需做 split( test , sample(4, 12 , repl = TRUE) ) .
split( test , sample(4, 12 , repl = TRUE) )
它比你想象的容易 . 要在三个随机选择的新集合中拆分向量,请运行以下代码:
test <- 1:12 split(sample(test), 1:3)
通过这样做,无论何时运行此代码,您都可以在三个不同的集合中获得新的随机分布(非常适合k折交叉验证) .
你得到:
> 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
4 回答
您可以使用
rep
为每个组创建索引,然后根据该分组进行拆分如果你想让项目被随机分配,这样它不仅仅是第一个向量中的前两个项目,第二个向量中的下三个项目,......,你可以添加调用
sample
如果你没有特定的长度(2,3,7),但只是不希望它每次都是等长度向量,那么SimonO101的答案是要走的路 .
如何使用
sample
略有不同......sample
中的第一个参数是将矢量拆分为的组数 . 第二个参数是向量中的元素数 . 这将随机将每个连续元素分配到3个向量之一 . 对于4个向量,只需做split( test , sample(4, 12 , repl = TRUE) )
.它比你想象的容易 . 要在三个随机选择的新集合中拆分向量,请运行以下代码:
通过这样做,无论何时运行此代码,您都可以在三个不同的集合中获得新的随机分布(非常适合k折交叉验证) .
你得到:
您可以使用辅助向量来格式化分割数据的方式 . 例:
会产生输出: