我正在将R代码翻译成Python。在data.frame上有一个do.call命令,用于对其行进行排序。如何做到这一点让我困惑。
signary = matrix(c( 1, 1, 1,-1,-1,-1,
0, 0, 0, 1,-1, 0,
0, 1,-1, 0, 0, 0,
1,-1,-1, 0, 0, 0,
0, 0, 0, 1, 1,-1),
ncol=5)
do.call('order', as.data.frame(signary))
[1] 5 6 4 3 1 2
如何完成行的排序?
谢谢!
答案 0 :(得分:2)
这将按第一列排序行,然后是第二列,然后是第三列。如果按do.call的结果重新索引,则得到
ii<-do.call('order', as.data.frame(signary))
signary[ii,]
# [,1] [,2] [,3] [,4] [,5]
# [1,] -1 -1 0 0 1
# [2,] -1 0 0 0 -1
# [3,] -1 1 0 0 1
# [4,] 1 0 -1 -1 0
# [5,] 1 0 0 1 0
# [6,] 1 0 1 -1 0
首先,您按第一列排序,打破与第2列的关系,打破与第3列的关系等等。
该陈述相当于
ii<-order(signary[,1], signary[,2], signary[,3], signary[,4], signary[,5])
ii
# [1] 5 6 4 3 1 2