do.call如何命令data.frame的行?

时间:2014-10-02 19:38:11

标签: r do.call

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

如何完成行的排序?

谢谢!

1 个答案:

答案 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