2

我正在将 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

行的顺序是如何完成的?

谢谢!

4

1 回答 1

4

这将按第一列、第二列、第三列对行进行排序。如果你通过 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
于 2014-10-02T19:43:08.997 回答