2013-01-09 86 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