排序矢量与网格中的元素的强制排列

时间:2016-10-24 22:33:34

标签: r sorting

我有一个给定顺序的向量:

p <- c("x", "y", "y",
       "y", "z", "a",
       "b", "b", "c", 
       "c", "c", "v")

我希望输出看起来好看&#34;在具有三列的网格中,这意味着如果三个值相同,则应强制它们位于同一行(yc):

p.expected <- c( "y", "y", "y",
                 "x", "z", "a",
                 "b", "b", "v", 
                 "c", "c", "c")

我不介意一个群体的价值是上涨还是下跌,但这种变化应该尽可能小。

例如,如果我将y值的原始位置在Y轴上写为{1, 2},则y行的理想行将为1或{{1} }。虽然2 {3,4}应出现在行c3中。

因此,这个答案对顺序的改变太过分了:

4

以下是打印输出的方法:

     [,1] [,2] [,3]
[1,] "y"  "y"  "y" 
[2,] "c"  "c"  "c" 
[3,] "x"  "z"  "a" 
[4,] "b"  "b"  "v" 

1 个答案:

答案 0 :(得分:0)

p <- c("x", "y", "y",
       "y", "z", "a",
       "b", "b", "c", 
       "c", "c", "v")
myfactor <- table(ordered(p, levels = unique(p)))

mynumbers <- rep(myfactor, myfactor)

根据myfactor的递减顺序对mynumbers进行排序:

output <- myfactor[order(-mynumbers)]

您可以在矩阵中更好地看到它:

matrix(output, ncol = 3, byrow = T)

##     [,1] [,2] [,3]
## [1,] "y"  "y"  "y" 
## [2,] "c"  "c"  "c" 
## [3,] "b"  "b"  "x" 
## [4,] "z"  "a"  "v"