認(rèn)識apply
> ##apply(x,MARGIN,FUN,……)
> ##x是要處理的對象,可以是矩陣、數(shù)組、數(shù)據(jù)框
> ##MARGIN:如果是矩陣則值為1或2,1每一行,2每一列。FUN要用的函數(shù)。……FUN所需額外參數(shù)
> ##動物園,觀察了3天內(nèi)老虎、獅子、豹子出現(xiàn)的次數(shù),列出各種動物出現(xiàn)的最高次數(shù)。
> info <- matrix(c(8, 9, 6, 5, 7, 2, 10, 6, 8),ncol = 3)
> colnames(info) <- c("tiger", "lion", "leopard")
> row.names(info) <- c("day1", "day2", "day3")
> info
tiger lion leopard
day1 8 5 10
day2 9 7 6
day3 6 2 8
> apply(info, 2, max)
tiger lion leopard
9 7 10
sapply lapply
> ##sapply()可處理數(shù)據(jù)框、向量、list。格式為sapply(x,F(xiàn)UN,……)
> ##如果處理完list/數(shù)據(jù)框/向量后,返回的數(shù)字,則返回的結(jié)果會被簡化成向量
> ##如果處理完list/數(shù)據(jù)框后,返回的向量有相同的長度,則返回的結(jié)果被簡化為矩陣
> ##如果是其他情況則返回的是list
>
> ## lapply()所傳回來的是list。格式為lapply(x,F(xiàn)UN,……)
> ## x可以是向量、數(shù)據(jù)框和list
tapply
> ## tapply()主要用于對一個因子或因子列表,執(zhí)行指定的函數(shù)調(diào)用,最后獲得匯總信息。
> ## 格式tapply(x, INDEX, FUN,……)
> ## x處理對象,通常為向量,也可是其他數(shù)據(jù)形態(tài)。INDEX是因子或分類字符串向量或因子列表
>
> ## 使用state.region,計算美國4大區(qū)包含的州的數(shù)量
>
> tapply(state.region, state.region, length)
Northeast South North Central West
9 16 12 13
> ## 用state.x77和state.region,計算美國4大區(qū)各區(qū)百姓平均收入。
> head(state.x77)
Population Income Illiteracy Life Exp Murder HS Grad Frost Area
Alabama 3615 3624 2.1 69.05 15.1 41.3 20 50708
Alaska 365 6315 1.5 69.31 11.3 66.7 152 566432
Arizona 2212 4530 1.8 70.55 7.8 58.1 15 113417
Arkansas 2110 3378 1.9 70.66 10.1 39.9 65 51945
California 21198 5114 1.1 71.71 10.3 62.6 20 156361
Colorado 2541 4884 0.7 72.06 6.8 63.9 166 103766
> zhang19 <- function()
+ {
+ str_t <- as.character(state.region) # 轉(zhuǎn)成字符串
+ income <- state.x77[,2] # 各州收入
+ names(income) <- NULL #去掉各州輸入向量名稱
+ a.income <- tapply(income,
+ factor(str_t, levels = c("Northeast", "South", "North Central", "West")),
+ mean)
+ return(a.income)
+ }
> zhang19()
Northeast South North Central West
4570.222 4011.938 4611.083 4702.615