按值而非水平排列 univariateTable 输出

Arrange univariateTable output by values not by levels

我在尝试导出由因子水平组成的 table 时试图解决以下不便之处。这是生成示例数据的代码,以及从中生成的 table。

data <- c(sample('A',30,replace=TRUE), sample('B',120,replace=TRUE), 
          sample('C',180,replace=TRUE), sample('D',70,replace=TRUE))
library(Publish)
univariateTable(~data)

univariateTable 的默认输出是按级别(从 A 到 D):

  Variable Levels      Value
1     data      A   30 (7.5)
2               B 120 (30.0)
3               C 180 (45.0)
4               D  70 (17.5)

如何更改此设置,以便输出基于值?我的意思是,第一行是最大的数字(和百分比),最后的低点是最低的,像这样:

  Variable Levels      Value
1     data      C 180 (45.0)
2               B 120 (30.0)
3               D  70 (17.5)
4               A   30 (7.5)

假设“Publish”包是从github安装的包,我们提取(之前的数字使用suborder它并使用它订购“xlevels”和“summary.totals”。

#library(devtools)
#install_github("TagTeam/Publish")
library(Publish)
Out <- univariateTable(~data)
i1 <- order(as.numeric(sub('\s+.*', '', 
            Out$summary.totals$data)), decreasing=TRUE)
Out$xlevels$data <- Out$xlevels$data[i1]
Out$summary.totals$data <- Out$summary.totals$data[i1]
Out
#  Variable Level      Total
#1     data     C 180 (45.0)
#2              B 120 (30.0)
#3              D  70 (17.5)
#4              A   30 (7.5)

数据

set.seed(24)
data <- c(sample('A',30,replace=TRUE), sample('B',120,replace=TRUE), 
          sample('C',180,replace=TRUE), sample('D',70,replace=TRUE))