【问题标题】:Reorder consecutive integers in blocks using R使用 R 对块中的连续整数重新排序
【发布时间】:2014-02-25 02:05:42
【问题描述】:

我有一个数字 1:17 的向量。我在其中随机重新排序子集向量(下面的示例是必须随机重新排序 1:10 和 11:17):

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

虽然我能够获得最终重新排序的向量,但是否有更优雅的方法来处理此代码?我之所以问是因为这只是一个示例,而我真正的问题是一个更大的向量,其中包含更多需要随机重新排序的子向量。代码会太多行!

谢谢。

【问题讨论】:

  • 子集是如何确定的?
  • 对于这个确切的例子,你可以做unlist(lapply(list(1:10, 11:17), sample))
  • 仅供参考,当分配连续整数x <- c(1:10)时,您不需要使用c()x <- 1:10 也一样。
  • 感谢两位的帮助! @AnandaMahto:子集有点奇怪:第一个子集是 1 和 52。第二个子集是 2-51。第三个子集是 53-102。第四个到第 23 个子集是长度为 26 的连续子集(即 103-128、129-154、...、675-700)
  • 所以,它是“子集”而不是“子字符串”,因为我猜是第一个子集(1 和 52)......

标签: r random vector


【解决方案1】:

所以使用 Ananda 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 ...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多