我有一个只有列标签的矩阵,我想按列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
非常感谢您的协助。
答案 0 :(得分:1)
你的问题需要更加清晰。 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 :(得分:0)
library(plyr)
counts <- count(df, 'A')
df[order(merge(df, counts)$freq, decreasing=TRUE), ]