您好,登錄后才能下訂單哦!
本篇內容介紹了“R語言中apply和tapply怎么用”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
一、apply()函數
apply函數可將一個任意函數“應用”到矩陣、數組、數據框的任何維度上。使用格式如下:
apply(x, MARGIN, FUN, ...)
其中x為數據對象,MARGIN是維度的下標,FUN是由你指定的函數,而...則包括了任何想傳遞給FUN的參數。在矩陣或數據框中, MARGIN=1表示行, MARGIN=2表示列。
示例如下:
set.seed(100)mydata <- matrix(rnorm(30), nrow=6) #生成隨機數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函數,這也包括你自行編寫的函數。
二、tapply()函數
tapply()函數可根據因子、向量和要計算的函數計算,使用格式如下:
tapply(X, INDEX, FUN = NULL, ..., simplify = TRUE)
其中X通常是一向量;INDEX是一個list對象,且該list中的每一個元素都是與X有同樣長度的因子;FUN是需要計算的函數;simplify是邏輯變量,若取值為TRUE(默認值),且函數FUN的計算結果總是為一個標量值,那么函數tapply返回一個數組;若取值為FALSE,則函數tapply的返回值為一個list對象。
示例如下:
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)應用前面的apply求數學和英語的平均分
apply(roster[,c(2,3)],2,mean)Math English 500.9 21.8
2)當需要分組計算時候,使用tapply函數
tapply(roster[,"English"], roster[,"grade"], mean) A B 17 25
注:當index不是因子時,可以用as.factor()把參數強制轉換成因子
3)aggregate函數同樣可以得到類似的結果:
aggregate(x=roster[c('English')], by = list(roster$grade), FUN=mean)
4)實現類似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怎么用”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。