本篇內(nèi)容介紹了“R語言中apply和tapply怎么用”的有關(guān)知識(shí),在實(shí)際案例的操作過程中,不少人都會(huì)遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!
成都創(chuàng)新互聯(lián)專注于網(wǎng)站建設(shè),為客戶提供網(wǎng)站制作、成都網(wǎng)站設(shè)計(jì)、網(wǎng)頁設(shè)計(jì)開發(fā)服務(wù),多年建網(wǎng)站服務(wù)經(jīng)驗(yàn),各類網(wǎng)站都可以開發(fā),品牌網(wǎng)站制作,公司官網(wǎng),公司展示網(wǎng)站,網(wǎng)站設(shè)計(jì),建網(wǎng)站費(fèi)用,建網(wǎng)站多少錢,價(jià)格優(yōu)惠,收費(fèi)合理。
一、apply()函數(shù)
apply函數(shù)可將一個(gè)任意函數(shù)“應(yīng)用”到矩陣、數(shù)組、數(shù)據(jù)框的任何維度上。使用格式如下:
apply(x, MARGIN, FUN, ...)
其中x為數(shù)據(jù)對(duì)象,MARGIN是維度的下標(biāo),F(xiàn)UN是由你指定的函數(shù),而...則包括了任何想傳遞給FUN的參數(shù)。在矩陣或數(shù)據(jù)框中, MARGIN=1表示行, MARGIN=2表示列。
示例如下:
set.seed(100)mydata <- matrix(rnorm(30), nrow=6) #生成隨機(jī)數(shù)mydata [,1] [,2] [,3] [,4] [,5] [1,] -0.50219235 -0.58179068 -0.20163395 -0.9138142 -0.8143791 [2,] 0.13153117 0.71453271 0.73984050 2.3102968 -0.4384506 [3,] -0.07891709 -0.82525943 0.12337950 -0.4380900 -0.7202216 [4,] 0.88678481 -0.35986213 -0.02931671 0.7640606 0.2309445 [5,] 0.11697127 0.08988614 -0.38885425 0.2619613 -1.1577295 [6,] 0.31863009 0.09627446 0.51085626 0.7734046 0.2470760
利用apply求均值
apply(mydata, 2, mean)[1] 0.1454680 -0.1443698 0.1257119 0.4596365 -0.4421267apply(mydata, 2, mean, trim=0.2) #去掉端值[1] 0.1220539 -0.1888731 0.1008213 0.3403341 -0.4355267
注:FUN可為任意R函數(shù),這也包括你自行編寫的函數(shù)。
二、tapply()函數(shù)
tapply()函數(shù)可根據(jù)因子、向量和要計(jì)算的函數(shù)計(jì)算,使用格式如下:
tapply(X, INDEX, FUN = NULL, ..., simplify = TRUE)
其中X通常是一向量;INDEX是一個(gè)list對(duì)象,且該list中的每一個(gè)元素都是與X有同樣長度的因子;FUN是需要計(jì)算的函數(shù);simplify是邏輯變量,若取值為TRUE(默認(rèn)值),且函數(shù)FUN的計(jì)算結(jié)果總是為一個(gè)標(biāo)量值,那么函數(shù)tapply返回一個(gè)數(shù)組;若取值為FALSE,則函數(shù)tapply的返回值為一個(gè)list對(duì)象。
示例如下:
Student <- c("John Davis", "Angela Williams", "Bullwinkle Moose",
"David Jones", "Janice Markhammer", "Cheryl Cushing",
"Reuven Ytzrhak", "Greg Knox", "Joel England",
"Mary Rayburn")
Math <- c(502, 600, 412, 358, 495, 512, 410, 625, 573, 522)
English <- c(25, 22, 18, 15, 20, 28, 15, 30, 27, 18)
roster <- data.frame(Student, Math, English,stringsAsFactors=FALSE)
roster$grade[roster$Math <= 500] <- "A"
roster$grade[roster$Math > 500] <- "B"
roster
Student Math English grade
John Davis 502 25 B
Angela Williams 600 22 B
Bullwinkle Moose 412 18 A
David Jones 358 15 A
Janice Markhammer 495 20 A
Cheryl Cushing 512 28 B
Reuven Ytzrhak 410 15 A
Greg Knox 625 30 B
Joel England 573 27 B
Mary Rayburn 522 18 B
1)應(yīng)用前面的apply求數(shù)學(xué)和英語的平均分
apply(roster[,c(2,3)],2,mean)Math English 500.9 21.8
2)當(dāng)需要分組計(jì)算時(shí)候,使用tapply函數(shù)
tapply(roster[,"English"], roster[,"grade"], mean) A B 17 25
注:當(dāng)index不是因子時(shí),可以用as.factor()把參數(shù)強(qiáng)制轉(zhuǎn)換成因子
3)aggregate函數(shù)同樣可以得到類似的結(jié)果:
aggregate(x=roster[c('English')], by = list(roster$grade), FUN=mean)
4)實(shí)現(xiàn)類似excel的透視表功能
attach(roster)tapply(English,list(Student,grade),mean) A BAngela Williams NA 22Bullwinkle Moose 18 NACheryl Cushing NA 28David Jones 15 NAGreg Knox NA 30Janice Markhammer 20 NAJoel England NA 27John Davis NA 25Mary Rayburn NA 18Reuven Ytzrhak 15 NA
“R語言中apply和tapply怎么用”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!