2014-02-25 18 views
0

我有一个数字向量1:17。我随机重新排序子向量内它(下面的例子是1:10和11:17必须随机重新排序):使用R重新排序块中的连续整数

x = c(1:10) 
x_s = sample(x, length(x), replace = FALSE) 
[1] 7 9 3 4 10 5 1 6 8 2 
y=c(11:17) 
> y_s = sample(y, length(y), replace = FALSE) 
[1] 17 16 13 12 14 15 11 
final=c(x_s,y_s) 
[1] 7 9 3 4 10 5 1 6 8 2 17 16 13 12 14 15 11 

虽然我能得到我的最后重新排序向量,有没有更优雅这个代码的方法?我在问,因为这只是一个例子,而我真正的问题是一个更大的矢量,其中有更多的子矢量需要随机重新排序。代码将会太多!

谢谢。

+1

如何确定子集? – A5C1D2H2I1M1N2O1R2T1

+1

对于这个确切的例子,你可以做'unlist(lapply(list(1:10,11:17),sample))'。 – A5C1D2H2I1M1N2O1R2T1

+0

只是一个fyi,当分配连续的整数'x < - c(1:10)'时,你不需要使用'c()'。 'x < - 1:10'也是一样的。 –

回答

1

所以用你的组序列的阿南达Mahto的建议,并使用lapply(两次)和SEQ(两次)建立以列表格式序列:

unlist(
lapply(c(list(x= c(1,52),y= 2:51,z= 53:103) ,  
      lapply(seq(103, 675, by=26), seq, len=25)) , 
     sample) 
     ) 

到外lapply的说法是这样的:

List of 26 
$ x: num [1:2] 1 52 
$ y: int [1:50] 2 3 4 5 6 7 8 9 10 11 ... 
$ z: int [1:51] 53 54 55 56 57 58 59 60 61 62 ... 
$ : num [1:25] 103 104 105 106 107 108 109 110 111 112 ... 
$ : num [1:25] 129 130 131 132 133 134 135 136 137 138 ... 
$ : num [1:25] 155 156 157 158 159 160 161 162 163 164 ... 
$ : num [1:25] 181 182 183 184 185 186 187 188 189 190 ... 
$ : num [1:25] 207 208 209 210 211 212 213 214 215 216 ... 
$ : num [1:25] 233 234 235 236 237 238 239 240 241 242 ... 
$ : num [1:25] 259 260 261 262 263 264 265 266 267 268 ... 
$ : num [1:25] 285 286 287 288 289 290 291 292 293 294 ... 
$ : num [1:25] 311 312 313 314 315 316 317 318 319 320 ... 
$ : num [1:25] 337 338 339 340 341 342 343 344 345 346 ... 
$ : num [1:25] 363 364 365 366 367 368 369 370 371 372 ... 
$ : num [1:25] 389 390 391 392 393 394 395 396 397 398 ... 
$ : num [1:25] 415 416 417 418 419 420 421 422 423 424 ... 
$ : num [1:25] 441 442 443 444 445 446 447 448 449 450 ... 
$ : num [1:25] 467 468 469 470 471 472 473 474 475 476 ... 
$ : num [1:25] 493 494 495 496 497 498 499 500 501 502 ... 
$ : num [1:25] 519 520 521 522 523 524 525 526 527 528 ... 
$ : num [1:25] 545 546 547 548 549 550 551 552 553 554 ... 
$ : num [1:25] 571 572 573 574 575 576 577 578 579 580 ... 
$ : num [1:25] 597 598 599 600 601 602 603 604 605 606 ... 
$ : num [1:25] 623 624 625 626 627 628 629 630 631 632 ... 
$ : num [1:25] 649 650 651 652 653 654 655 656 657 658 ... 
$ : num [1:25] 675 676 677 678 679 680 681 682 683 684 ...