将向量重新排序为first, last, second, second last,等等



是否有一个简单的解决方案来重新排序向量,如
第一个元素,最后一个元素,第二个元素,倒数第二个元素,等等

所以我期望c(1,2,3,4,5)得到c(1,5,2,4,3)

原因是我有一个有16种颜色的调色板,颜色1与颜色2非常相似,但与颜色16不同。但是在我的图中,用颜色1标记的点与用颜色2标记的点很接近。

对于我的调色板,我使用color brewer的Set 1,并使用colorRampPalette来计算两者之间的颜色,因此它们有点相似。

一种解决方案是只使用sample(my_colors),但实际上我想像上面所说的那样重新排序它们。

这将满足您的需求:

a <- c(1,2,3,4,5)
b <- rbind(a,a[5:1])
c <-b [1:5]

希望有帮助

Here is a fiddle

可以用

进行概括
rbind(a,rev(a))[1:length(a)] 

有一个简单的方法:

a<-seq(1,100)
b<-a-median(a)
names(a)=b
a<-order(-abs(b))

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

从注释中:

1: From @bgoldst:一个更好的(一行)方法,不涉及向量名:

a[order(-abs(a-median(a)))]

2:(同样来自bgoldst)用于处理非数字(字母顺序)值:

letters[order(-abs(seq_along(letters)-(length(letters)+1)/2))]

最新更新