Сортировка матрицы на основе количества повторяющихся элементов в определенном столбце в R

У меня есть матрица с только метками столбца, и я хочу сортировать по столбцу A, где повторяющиеся элементы ранжируются до неповторения. Так как 7 появляется четыре раза в столбце A, тогда перемещается, чтобы быть впереди строк с 2 в столбце 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

Большое вам спасибо за помощь.

1
nl ja de
Это странно - строки на входе не соответствуют строкам в выходной таблице!
добавлено автор TMS, источник
Вам нужно приложить больше усилий либо при построении допустимого примера, либо при описании проблемы.
добавлено автор 42-, источник
Каково правило для связей? самый маленький сначала?
добавлено автор Matthew Plourde, источник

2 ответы

Вы вопрос должен быть намного яснее. Как определяются значения в B и C ? Из описания, похоже, что они должны быть только соответствующими значениями в столбцах 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
добавлено
library(plyr)
counts <- count(df, 'A')
df[order(merge(df, counts)$freq, decreasing=TRUE), ]
0
добавлено