当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


R addmargins 在多维表或数组上设置任意边距


R语言 addmargins 位于 stats 包(package)。

说明

对于给定的表,可以指定将哪个分类因子扩展一个或多个级别以保持要计算的边距。例如,可以在第一维度上形成总和和均值,在第二维度上形成中值。生成的表将为第一个维度提供两个额外级别,为第二个维度提供一个额外级别。默认值是对表中所有边距求和。其他可能性可能会给出取决于计算边距的顺序的结果。这在函数的打印输出中进行了标记。

用法

addmargins(A, margin = seq_along(dim(A)), FUN = sum, quiet = FALSE)

参数

A

表或数组。该函数使用 A"dim""dimnames" 属性。

margin

用于生成边距的维度向量。边距按照 margin 中指定尺寸的顺序形成。

FUN

listmargin 长度相同,列表中的每个元素都是 function 或函数列表。在长度为 1 的情况下,可以是一个函数而不是一个列表。列表元素的名称将在结果的暗名称中显示为级别。未命名的列表元素将具有构造的名称:函数的名称或基于表中位置的构造名称。

quiet

逻辑,它抑制告诉边距计算顺序的消息。

细节

如果用于生成边距的函数不可交换,则结果取决于计算边距的顺序。边距注释是通过命名 FUN 列表来完成的。

tablearrayA 具有相同的维度数,但具有 margin 中提到的额外维度级别。添加到每个维度的级别数是 FUN 中条目的长度。打印一条包含边距计算顺序的消息。

例子

Aye <- sample(c("Yes", "Si", "Oui"), 177, replace = TRUE)
Bee <- sample(c("Hum", "Buzz"), 177, replace = TRUE)
Sea <- sample(c("White", "Black", "Red", "Dead"), 177, replace = TRUE)
(A <- table(Aye, Bee, Sea))
(aA <- addmargins(A))

ftable(A)
ftable(aA)

# Non-commutative functions - note differences between resulting tables:
ftable( addmargins(A, c(3, 1),
                   FUN = list(list(Min = min, Max = max),
                              Sum = sum)))
ftable( addmargins(A, c(1, 3),
                   FUN = list(Sum = sum,
                              list(Min = min, Max = max))))

# Weird function needed to return the N when computing percentages
sqsm <- function(x) sum(x)^2/100
B <- table(Sea, Bee)
round(sweep(addmargins(B, 1, list(list(All = sum, N = sqsm))), 2,
            apply(B, 2, sum)/100, `/`), 1)
round(sweep(addmargins(B, 2, list(list(All = sum, N = sqsm))), 1,
            apply(B, 1, sum)/100, `/`), 1)

# A total over Bee requires formation of the Bee-margin first:
mB <-  addmargins(B, 2, FUN = list(list(Total = sum)))
round(ftable(sweep(addmargins(mB, 1, list(list(All = sum, N = sqsm))), 2,
                   apply(mB, 2, sum)/100, `/`)), 1)

## Zero.Printing table+margins:
set.seed(1)
x <- sample( 1:7, 20, replace = TRUE)
y <- sample( 1:7, 20, replace = TRUE)
tx <- addmargins( table(x, y) )
print(tx, zero.print = ".")

作者

Bendix Carstensen, Steno Diabetes Center & Department of Biostatistics, University of Copenhagen, https://BendixCarstensen.com, autumn 2003. Margin naming enhanced by Duncan Murdoch.

也可以看看

tableftablemargin.table

相关用法


注:本文由纯净天空筛选整理自R-devel大神的英文原创作品 Puts Arbitrary Margins on Multidimensional Tables or Arrays。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。