在R中按顺序Randoming等值

时间:2018-05-06 20:08:04

标签: r

我必须得到一个向量的顺序来排序其他向量。关键是我不希望我的功能稳定。事实上,我想随机排列相等的值。知道如何在有限时间内在R中做到这一点? :D

感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

尝试fct_reorder包中的forcats来按顺序排列一个因素。如果您还要引入随机性,请尝试使用fct_reorder2

.y = runif(length(your_vector))

(我显然今天在奇怪的方向思考 - fct_reorder会重新排列一个因素的级别。如果这就是你所追求的,这可能会有所帮助。否则,order是更好的方法。 )

答案 1 :(得分:0)

您可以使用order在基础R中执行此操作。 order将采用多个变量进行排序。如果你让第二个变成一个随机变量,它会随机化关系。以下是使用内置光圈数据的示例。变量Sepal.Length具有第二个最低值的几个关系。以下是一些:

iris$Sepal.Length[c(9,39,43)]
[1] 4.4 4.4 4.4

现在让我们对该变量进行排序(稳定排序),然后使用随机二级排序进行排序。

order(iris$Sepal.Length)
  [1]  14   9  39  43  42   4   7  23  48   3  30  12  13  25  31  46   2  10  35
 [20]  38  58 107   5   8  26  27  36  41  44  50  61  94   1  18  20  22  24  40
 [39]  45  47  99  28  29  33  60  49   6  11  17  21  32  85  34  37  54  81  82
 [58]  90  91  65  67  70  89  95 122  16  19  56  80  96  97 100 114  15  68  83
 [77]  93 102 115 143  62  71 150  63  79  84  86 120 139  64  72  74  92 128 135
 [96]  69  98 127 149  57  73  88 101 104 124 134 137 147  52  75 112 116 129 133
[115] 138  55 105 111 117 148  59  76  66  78  87 109 125 141 145 146  77 113 144
[134]  53 121 140 142  51 103 110 126 130 108 131 106 118 119 123 136 132

order(iris$Sepal.Length, sample(150,150))
  [1]  14  43  39   9  42  48   7   4  23   3  30  25  31  46  13  12  35  38 107
 [20]  10  58   2   8  41  27  61  94   5  36  44  50  26  18  22  99  40  20  47
 [39]  24  45   1  33  60  29  28  49  85  11   6  32  21  17  90  81  91  54  34
 [58]  37  82  67 122  95  65  70  89 100  96  56 114  80  16  19  97  93  15  68
 [77] 143 102  83 115 150  62  71 120  79  84  63 139  86  72 135  74  64  92 128
 [96] 149  69  98 127  88 134 101  57 137  73 104 147 124 138 112 129 116  75  52
[115] 133 148  55 111 105 117  59  76  87  66  78 146 141 109 125 145 144 113  77
[134] 140  53 121 142  51 103 126 130 110 108 131 106 136 119 118 123 132

没有随机二级排序,位置2,3和4按顺序排列(稳定)。通过随机的二级排序,它们是混乱的。