工作筆記記錄,會持續更新.... 目錄: apply tapply lapply sapply merge apply函數: apply:apply的中文意思是應用,這個函數的意思是通過將一個函數應用到矩陣或數組中,返回一個向量或數組 語法:apply(X, MARGIN, FUN, ...) , ...
工作筆記記錄,會持續更新....
目錄:
- apply
- tapply
- lapply
- sapply
- merge
apply函數:
- apply:apply的中文意思是應用,這個函數的意思是通過將一個函數應用到矩陣或數組中,返回一個向量或數組
- 語法:apply(X, MARGIN, FUN, ...) , 其中X為一個數組;MARGIN為一個向量(表示要將函數FUN應用到X的行還是列),1:表示取行,2:表示取列,c(1,2)表示行、列都計算。
- 示例:
> ma <- matrix(c(1:4, 1, 6:8), nrow = 2);ma [,1] [,2] [,3] [,4] [1,] 1 3 1 7 [2,] 2 4 6 8 > apply(ma, 1, sum) [1] 12 20 > apply(ma, 2, sum) [1] 3 7 7 15
View Code
tapply:
- tapply:是對向量中的數據進行分組處理,而非對整體數據進行處理
- 語法: tapply(X, INDEX, FUN = NULL, ..., simplify = TRUE),
- 其中X通常是一向量;
- INDEX是一個list對象,且該list中的每一個元素都是與X有同樣長度的因數;
- FUN是需要計算的函數;
- simplify是邏輯變數,TRUE(預設值),且函數FUN的計算結果總是為一個標量值,那麼函數tapply返回一個數組;若取值為FALSE,則函數tapply的返回值為一個list對象。需要註意的是,當第二個參數INDEX不是因數時,函數 tapply() 同樣有效,因為必要時 R 會用 as.factor()把參數強制轉換成因數
- 示例:
> da year province sale 1 2007 A 1 2 2007 B 2 3 2007 C 3 4 2007 D 4 5 2008 A 5 6 2008 C 6 7 2008 D 7 8 2009 B 8 9 2009 C 9 10 2009 D 10 > attach(da) > tapply(sale,list(year,province),mean) A B C D 2007 1 2 3 4 2008 5 NA 6 7 2009 NA 8 9 10
View Code
lapply:
- lapply: (list apply)針對list的apply函數
- 語法: lapply(X, FUN, ...) lapply的返回值是和一個和X有相同的長度的list對象,這個list對象中的每個元素是將函數FUN應用到X的每一個元素
- 示例:
#外賣示例數據 s<-data.frame(shop_id=c('001','002'),saled=c(35,78), takeout_cost=c(30,60),delivery_time=c(10,20)) lapply(s,function(x){ if(is.numeric(x)){ mean(x) } else{ length(x) } })
View Code - 結果:$shop_id [1] 2 $saled [1] 56.5 $takeout_cost [1] 45 $delivery_time [1] 15
sapply:
- sapply:sapply函數和Lapply函數類似,也是對List進行處理,只是在返回結果上,sapply會根據結果的數據類型和結構,重新構建一個合理的數據類型返回
- 語法:sapply(X, FUN,..., simplify = TRUE, USE.NAMES = TRUE)
- 示例:如上例,調用sapply函數返回結果為:
shop_id saled takeout_cost delivery_time 2.0 56.5 45.0 15.0
merge:
- merge: merge是R語言中用來合併數據框的函數
- 語法:merge(x, y, by = intersect(names(x), names(y)), by.x = by, by.y = by, all = FALSE, all.x = all, all.y = all, sort = TRUE, suffixes = c(".x",".y"), incomparables = NULL, ...)
- x,y:用於合併的兩個數據框
- by.x,by.y:指定依據哪些行合併數據框,預設值為相同列名的列.
- all.x,all.y:指定x和y的行是否應該全在輸出文件
- sort:by指定的列是否要排序
- suffixes:指定除by外相同列名的尾碼
- incomparables:指定by中哪些單元不進行合併
- 示例代碼:
#數據: w1: NAME SCHOOL CLASS ENGLISH A S1 10 85 B S2 5 50 A S1 4 90 A S1 11 90 C S1 1 12 w2: NAME SCHOOL CLASS MATHS ENGLISH A S3 5 80 88 B S2 5 89 81 C S1 1 55 32 merge(w1, w2, all = T) NAME SCHOOL CLASS ENGLISH MATHS 1 A S1 4 90 NA 2 A S1 10 85 NA 3 A S1 11 90 NA 4 A S3 5 88 80 5 B S2 5 50 NA 6 B S2 5 81 89 7 C S1 1 12 NA 8 C S1 1 32 55 merge(w1, w2, by = c("NAME", "SCHOOL", "CLASS"), all = T) NAME SCHOOL CLASS ENGLISH.x MATHS ENGLISH.y 1 A S1 4 90 NA NA 2 A S1 10 85 NA NA 3 A S1 11 90 NA NA 4 A S3 5 NA 80 88 5 B S2 5 50 89 81 6 C S1 1 12 55 32
View Code -