按R中的自定义函数排序

Sort by custom function in R

在python中,我可以做类似

的事情
a = [1,100,5,-5,-7,99,-100]
a.sort(key= lambda x: (x<0,abs(x)))

它给了我 [1, 5, 99, 100, -5, -7, -100]

按positive/negative个数和abs值排序

我如何在 R 中做同样的事情?不拆分为正负数?

a = c(1,100,5,-5,-7,99,-100)

order取排序键lambda

的函数
a[order(a<0, abs(a))]

使用order()函数:

a = c(1,100,5,-5,-7,99,-100)
a[order(a < 0, abs(a))]
#> [1]    1    5   99  100   -5   -7 -100

reprex package (v2.0.1)

创建于 2022-03-22

另一种在某些情况下有用的可能性是为 class 定义一个 xtfrm 方法。例如,如果您知道所有值都小于 1000,则可以使用

class(a) <- "classa"
xtfrm.classa <- function(x) {
    (a < 0) + abs(a)/1000
}

sort(a)
#> [1]    1    5   99  100   -5   -7 -100

reprex package (v2.0.1)

创建于 2022-03-22

如何使用水平因子?

a <-  c(1, 100, 5, -5, -7, 99, -100)
res <- factor(x = a, levels = unique(a[order(abs(a))]), ordered = TRUE)

结果

res
# [1] 1    100  5    -5   -7   99   -100
# Levels: 1 < 5 < -5 < -7 < 99 < 100 < -100

所需的排序顺序

unique(a[order(abs(a))])
# [1]    1    5   -5   -7   99  100 -100