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

时间:2017-08-07 18:53:03

标签: r

我有这样的矢量

check_overlap = TRUE

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

seq_vector <- c(3,12,5,9,11,8,4,6,7,11,15,3,9,10,12,2)

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

3 个答案:

答案 0 :(得分:6)

尝试x[order(x*v)]其中v对于奇数为-1,对于偶数为+1。

感谢@lmo:

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

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

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

(谢谢@ d.b)如果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

答案 1 :(得分:3)

将模数乘以2(%% 2)以确定奇数和偶数元素,并相应地确定sort

c(sort(seq_vector[seq_vector %% 2 == 1], decreasing = TRUE),             #For odd
                               sort(seq_vector[seq_vector %% 2 == 0]))   #For even
 #[1] 15 11 11  9  9  7  5  3  3  2  4  6  8 10 12 12

答案 2 :(得分:2)

使用辅助功能。

is.odd <- function(x) (x %% 2) == 1

result <- c(sort(seq_vector[is.odd(seq_vector)], decreasing = TRUE),
            sort(seq_vector[!is.odd(seq_vector)]))
result