首页 > 解决方案 > R订单功能不订购东西?

问题描述

我刚开始玩一些 R。最初的练习是首先打印lynx数据集:

> print(lynx)
Time Series:
Start = 1821 
End = 1934 
Frequency = 1 
  [1]  269  321  585  871 1475 2821 3928 5943 4950 2577  523   98  184  279  409 2285
 [17] 2685 3409 1824  409  151   45   68  213  546 1033 2129 2536  957  361  377  225
 [33]  360  731 1638 2725 2871 2119  684  299  236  245  552 1623 3311 6721 4254  687
 [49]  255  473  358  784 1594 1676 2251 1426  756  299  201  229  469  736 2042 2811
 [65] 4431 2511  389   73   39   49   59  188  377 1292 4031 3495  587  105  153  387
 [81]  758 1307 3465 6991 6313 3794 1836  345  382  808 1388 2713 3800 3091 2985 3790
 [97]  674   81   80  108  229  399 1132 2432 3574 2935 1537  529  485  662 1000 1590
[113] 2657 3396

然后我应该以递增的顺序订购它们。我很快找到了order() 函数 ,它看起来像它应该做的那样(正确的答案也表明了这一点)。

所以我这样做:

> print(order(lynx))
  [1]  69  22  70  71  23  68  99  98  12  78 100  21  79  13  72  59  24  32  60 101
 [21]  41  42  49   1  14  40  58   2  88  51  33  30  31  73  89  80  67 102  15  20
 [41]  61  50 109  11 108  25  43   3  77 110  97  39  48  34  62  57  81  52  90   4
 [61]  29 111  26 103  74  82  91  56   5 107 112  53  44  35  54  19  87  63  38  27
 [81]  55  16 104  66  28  10 113  17  92  36  64   6  37 106  95  94  45 114  18  83
[101]  76 105  96  86  93   7  75  47  65   9   8  85  46  84

这在重新排列数字方面起到了作用,但它看起来根本没有排序。如果我们从一开始就看,它是 69,然后是 22,然后是 70。它似乎根本没有排序。

订单有什么作用?如果不排序?

标签: r

解决方案


返回排序的order位置索引。我们需要使用该索引来重新排序值并分配回同一个对象[]以保持结构完整

lynx[] <- lynx[order(lynx)]

-输出

> lynx
Time Series:
Start = 1821 
End = 1933 
Frequency = 1 
  [1]   80   91   97   99  125  140  157  217  265  358  366  387  389  413  417  450  490  519  527  539  599  624  715  723  775  905  905  911
 [29]  927  950  976  983  985  996 1087 1142 1152 1161 1175 1300 1318 1322 1330 1470 1486 1555 1557 1588 1657 1666 1666 1674 1712 1719 1743 1775
 [57] 1839 1942 1989 1990 1997 2006 2028 2052 2084 2140 2153 2163 2197 2234 2263 2322 2404 2502 2519 2530 2534 2545 2548 2585 2804 2857 2864 2866
 [85] 2870 2941 2949 2976 3058 3129 3136 3139 3154 3175 3192 3197 3201 3224 3294 3438 3452 3463 3504 3556 3623 3647 3661 3712 3770 3817 3870 3896
[113] 3922

或者也可以使用sort然后重新分配

lynx[] <- sort(lynx)

关于这些order位置向量的含义,让我们考虑这里创建的示例。第一个位置order是 70 即在新的有序数据中,应该排序的值将从原始时间序列的第 70 个位置开始

> order(lynx)
  [1]  70  26  35  38  42  19 103  84 111  75 109  74  10  63  29 112  94  85  80  31  15  49  39  88  17  46 101  69  24  98  54  20   8  27 113  56
 [37]  68 100   3 108   4  72  47  73  93  59  43  34  86  50 104 105  36  51 110  92  78  53  62  16 102  81   7  77  65  21  40  87  44  41  96  76
 [73]  25  83  28   2  95   5  23  99  37  11  57  64   1  45  52  18   6  91  30  13  97 106  67  55  58  14  60  32  48   9  22  82 107  90  89  71
[109]  33  66  79  12  61
> lynx[70] # value corresponds to 70th position is 80
[1] 80

数据

set.seed(24)
lynx <- ts(sample(80:4000, 113, replace = TRUE), start = c(1821), frequency = 1)

推荐阅读