我有这样的矢量
check_overlap = TRUE
我想按奇数的降序格式化它们,然后按偶数的升序排列。以上seq_vector的输出将为
seq_vector <- c(3,12,5,9,11,8,4,6,7,11,15,3,9,10,12,2)
你能帮我解释一下它的逻辑吗?
答案 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