按值而不是按级别排列univariateTable输出

时间:2016-01-25 06:09:55

标签: r export-to-csv

尝试导出包含因子级别的表时,我试图解决以下不便之处。以下是生成示例数据的代码,以及来自它的表。

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)

1 个答案:

答案 0 :(得分:1)

假设“发布”包是从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))