【问题标题】:Arrange univariateTable output by values not by levels按值而不是按级别排列 univariateTable 输出
【发布时间】:2016-01-25 06:09:54
【问题描述】:

在尝试导出包含因子水平的表时,我正在尝试解决以下不便。这是生成示例数据的代码,以及从中生成的表格。

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
  • @Pascal 它是从 github 安装的

标签: r export-to-csv


【解决方案1】:

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

#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))

【讨论】:

  • 谢谢,很明显,但你能解释一下'\\s+.*', '' 的用途吗?
  • @Opsoum 它匹配多个空格之一 (\\s+),后跟零个或多个字符,并替换为 sub 中的 ''。基本上,它会删除从第一个空格字符开始的所有字符。
猜你喜欢
  • 1970-01-01
  • 2017-10-16
  • 2017-09-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多