基于R中特定列中的重复元素的数量对矩阵进行排序

时间:2013-01-09 17:53:49

标签: r sorting

我有一个只有列标签的矩阵,我想按列A排序,其中重复元素在非重复之前排序。因此,因为7在A列中出现了4次,所以将a移动到A列中的行前面,我希望这是有道理的。

    A   B   C
    1   11  14
    2   2   2
    2   5   12
    2   13  2
    3   16  19
    3   10  0
    4   20  17
    5   5   16
    7   14  18
    7   8   10
    7   10  17
    7   7   0

现在,我希望它看起来如下。

    A   B   C
    7   14  18
    7   8   10
    7   10  17
    7   7   0
    2   2   2
    2   5   12
    2   13  2
    3   16  19
    3   10  0
    1   11  14
    4   20  17
    5   5   16

非常感谢您的协助。

2 个答案:

答案 0 :(得分:1)

你的问题需要更加清晰。 BC中的值如何确定?从描述中可以看出,这些应该与原始数据的A列中的值相对应,但在您的示例中并非如此。

在你进一步澄清之前,这里有一种基础R的方法,可以根据你的情况按A对行进行排序。

d <- as.matrix(read.table(text="A   B   C
    1   11  14
    2   2   2
    2   5   12
    2   13  2
    3   16  19
    3   10  0
    4   20  17
    5   5   16
    7   14  18
    7   8   10
    7   10  17
    7   7   0", header=TRUE))

counts <- table(d[,'A'])
ranks <- rank(interaction(counts, names(counts), lex.order=TRUE))
d[order(ranks[match(d[,'A'], names(counts))], decreasing=TRUE), ]

#       A  B  C
#  [1,] 7 14 18
#  [2,] 7  8 10
#  [3,] 7 10 17
#  [4,] 7  7  0
#  [5,] 2  2  2
#  [6,] 2  5 12
#  [7,] 2 13  2
#  [8,] 3 16 19
#  [9,] 3 10  0
# [10,] 5  5 16
# [11,] 4 20 17
# [12,] 1 11 14

答案 1 :(得分:0)

library(plyr)
counts <- count(df, 'A')
df[order(merge(df, counts)$freq, decreasing=TRUE), ]