tapply
位于 base
包(package)。 说明
将函数应用于不规则数组的每个单元格,即应用于由某些因子的级别的唯一组合给出的每个(非空)值组或数据行。
用法
tapply(X, INDEX, FUN = NULL, ..., default = NA, simplify = TRUE)
参数
X |
|
INDEX |
一个或多个 |
FUN |
要应用的函数(或函数名称),或 |
... |
|
default |
(仅在简化为数组的情况下)数组初始化为的值 |
simplify |
逻辑性;如果 |
细节
如果 FUN
不是 NULL
,则它被传递给 match.fun
,因此它可以是函数或命名函数的符号或字符串。
值
当 FUN
存在时,tapply
为每个包含任何数据的单元格调用 FUN
。如果 FUN
为每个此类单元返回单个原子值(例如,函数 mean
或 var
),并且当 simplify
为 TRUE
时,tapply
返回包含这些值的 multi-way array, NA
表示空单元格。该数组的维数与 INDEX
的组件数相同;维度中的级别数是 INDEX
的相应组件中的级别数 (nlevels()
)。请注意,如果返回值具有类(例如,类 "Date"
的对象),则该类将被丢弃。
simplify = TRUE
始终返回一个数组,可能是一维的。
如果 FUN
不返回单个原子值,则 tapply
返回模式 list
的数组,其组件是对 FUN
的各个调用的值,即,结果是具有 dim
属性的列表。
当存在数组答案时,其 dimnames
由 INDEX
的名称命名,并基于分组因子的级别(可能在强制之后)。
对于列表结果,与空单元格对应的元素是 NULL
。
array2DF
函数可用于将tapply
返回的数组转换为数据帧,这样可能更方便进一步分析。
注意
...
参数提供的 FUN
可选参数不会划分为单元格。因此,FUN
期望其他参数的长度与 X
相同是不合适的。
例子
require(stats)
groups <- as.factor(rbinom(32, n = 5, prob = 0.4))
tapply(groups, groups, length) #- is almost the same as
table(groups)
## contingency table from data.frame : array with named dimnames
tapply(warpbreaks$breaks, warpbreaks[,-1], sum)
tapply(warpbreaks$breaks, warpbreaks[, 3, drop = FALSE], sum)
n <- 17; fac <- factor(rep_len(1:3, n), levels = 1:5)
table(fac)
tapply(1:n, fac, sum)
tapply(1:n, fac, sum, default = 0) # maybe more desirable
tapply(1:n, fac, sum, simplify = FALSE)
tapply(1:n, fac, range)
tapply(1:n, fac, quantile)
tapply(1:n, fac, length) ## NA's
tapply(1:n, fac, length, default = 0) # == table(fac)
## example of ... argument: find quarterly means
tapply(presidents, cycle(presidents), mean, na.rm = TRUE)
ind <- list(c(1, 2, 2), c("A", "A", "B"))
table(ind)
tapply(1:3, ind) #-> the split vector
tapply(1:3, ind, sum)
## Some assertions (not held by all patch propsals):
nq <- names(quantile(1:5))
stopifnot(
identical(tapply(1:3, ind), c(1L, 2L, 4L)),
identical(tapply(1:3, ind, sum),
matrix(c(1L, 2L, NA, 3L), 2, dimnames = list(c("1", "2"), c("A", "B")))),
identical(tapply(1:n, fac, quantile)[-1],
array(list(`2` = structure(c(2, 5.75, 9.5, 13.25, 17), names = nq),
`3` = structure(c(3, 6, 9, 12, 15), names = nq),
`4` = NULL, `5` = NULL), dim=4, dimnames=list(as.character(2:5)))))
参考
Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988) The New S Language. Wadsworth & Brooks/Cole.
也可以看看
便利函数 by
和 aggregate
(使用 tapply
); apply
、 lapply
及其版本 sapply
和 mapply
。
array2DF
将结果转换为数据帧。
相关用法
- R taskCallback 添加或删除顶级任务回调
- R table 交叉表和表格创建
- R taskCallbackManager 创建R级任务回调管理器
- R taskCallbackNames 查询当前内部顶级任务回调名称
- R tabulate 向量列表
- R toString 将 R 对象转换为字符串或测试字符串
- R tilde 波形符运算符
- R try 尝试允许错误恢复的表达式
- R transform 转换对象,例如 DataFrame
- R textConnection 文本连接
- R tracemem 对象的跟踪复制
- R traceback 获取并打印调用堆栈
- R t 矩阵转置
- R tempfile 为临时文件创建名称
- R typeof 对象的类型
- R trace 函数或方法调用的交互式跟踪和调试
- R timezones 时区
- R trimws 删除前导/尾随空格
- R file.path 构造文件路径
- R grep 模式匹配和替换
- R getwd 获取或设置工作目录
- R vector 向量 - 创建、强制等
- R lapply 对列表或向量应用函数
- R dump R 对象的文本表示
- R Sys.getenv 获取环境变量
注:本文由纯净天空筛选整理自R-devel大神的英文原创作品 Apply a Function Over a Ragged Array。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。