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。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。
