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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。