如何以特定格式对数组的奇数和偶数进行排序

vin*_*trx 2 r

我有这样的矢量

seq_vector <- c(3,12,5,9,11,8,4,6,7,11,15,3,9,10,12,2)
Run Code Online (Sandbox Code Playgroud)

我想按奇数的降序格式化它们,然后按偶数的升序排列.以上seq_vector的输出将是

new_seq_vector <- c(15,11,11,9,9,7,5,3,3,2,4,6,8,10,12,12)
Run Code Online (Sandbox Code Playgroud)

你能帮我解释一下它的逻辑吗?

Fra*_*ank 6

试试x[order(x*v)]这里v是-1奇,一为偶数.

感谢@lmo:

x[order( x*(-1)^x )]
# [1] 15 11 11  9  9  7  5  3  3  2  4  6  8 10 12 12
Run Code Online (Sandbox Code Playgroud)

所以v = (-1)^x这里.


其他一些构建方式v:@ db's (-1)^(x %% 2); 和我的,1-2*(x %% 2).

(谢谢@db)如果x包含负整数,则需要一个额外的排序向量:

# new example
x = c(2, 5, -15, -10, 1, -3, 12)
x[order(v <- (-1)^x, x*v)]
# [1]   5   1  -3 -15 -10   2  12
Run Code Online (Sandbox Code Playgroud)

  • 还有`seq_vector [order(seq_vector*( - 1)^ seq_vector)]`. (3认同)