2013-01-09 59 views
-1

我有一个只包含列标签的矩阵,我想按列A排序,其中重复元素在不重复之前排列。所以,因为7在A列中出现四次,那么它将移动到列A中有2列的行的前面。我希望这是有道理的。根据R中特定列中重复元素的数量排序矩阵R

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 

非常感谢您的协助。

+1

关系的规则是什么?最小的第一? –

+0

这很奇怪 - 输入中的行不对应输出表中的行! – TMS

+0

您需要付出更多的努力来构建一个有效的例子或描述问题。 –

回答

0
library(plyr) 
counts <- count(df, 'A') 
df[order(merge(df, counts)$freq, decreasing=TRUE), ] 
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