在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]
它按正/負數和abs值排序。
我怎樣才能在 R 中做同樣的事情?不分成正數和負數?
a = c(1,100,5,-5,-7,99,-100)
uj5u.com熱心網友回復:
使用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 包于 2022-03-22 創建(v2.0.1)
在某些情況下有用的另一種可能性是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 包于 2022-03-22 創建(v2.0.1)
uj5u.com熱心網友回復:
order取排序鍵 lambda 的函式
a[order(a<0, abs(a))]
uj5u.com熱心網友回復:
將因子與水平一起使用怎么樣?
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
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/448476.html
