99999久久久久久亚洲,欧美人与禽猛交狂配,高清日韩av在线影院,一个人在线高清免费观看,啦啦啦在线视频免费观看www

熱線電話:13121318867

登錄
2018-10-25 閱讀量: 862
R里循環(huán)語句筆記分享(4)

R語言中的循環(huán)函數(shù)(Grouping Function) R語言中有幾個(gè)常用的函數(shù),可以按組對(duì)數(shù)據(jù)進(jìn)行處理,apply, lapply, sapply, tapply, mapply,等。這幾個(gè)函數(shù)功能有些類似,下面介紹下這幾個(gè)函數(shù)的用法。

Apply

這是對(duì)一個(gè)Matrix或者Array進(jìn)行某個(gè)維度的運(yùn)算。其格式是:

Apply(數(shù)據(jù),維度Index,運(yùn)算函數(shù),函數(shù)的參數(shù))

對(duì)于Matrix來說,其維度值為2,第二個(gè)參數(shù)維度Index中,1表示按行運(yùn)算,2表示按列運(yùn)算。下面舉一個(gè)例子:

m<-matrix(1:6,2,3)

構(gòu)建一個(gè)簡單的2行3列的矩陣,內(nèi)容為:

[,1] [,2] [,3]

[1,] 1 3 5

[2,] 2 4 6

如果我們要計(jì)算每一行的sum值,那么我們可以寫為:apply(m,1,sum)[1] 9 12如果要計(jì)算每一列的mean值,那么改為:apply(m,2,mean)[1] 1.5 3.5 5.5假如某個(gè)值為NA,那么要忽略NA值,進(jìn)行每一行的SUM怎么辦呢?m[2,2]<-NA [,1] [,2] [,3]

[1,] 1 3 5

[2,] 2 NA 6

apply(m,1,sum)

[1] 9 NA 本身sum函數(shù)有一個(gè)參數(shù)na.rm,我們可以將這個(gè)參數(shù)帶人到apply函數(shù)中,作為第4個(gè)參數(shù):apply(m,1,sum,na.rm=TRUE)

[1] 9 8 需要注意的是如果是Data Frame,那么系統(tǒng)會(huì)將其轉(zhuǎn)為Matrix,如果所有Column不是數(shù)字類型或者類型不一致,導(dǎo)致轉(zhuǎn)換失敗,那么apply是運(yùn)算不出任何一列的結(jié)果的。Lapply

前面說到apply是對(duì)于matrix和array的,針對(duì)list,我們可以使用lapply函數(shù)。該函數(shù)接收list,返回的結(jié)果也是一個(gè)list。其調(diào)用如下:Apply(數(shù)據(jù),運(yùn)算函數(shù),函數(shù)的參數(shù))對(duì)于Data Frame來說,如果不同的列有不同的數(shù)據(jù)類型,不能轉(zhuǎn)換成Matrix,但是卻可以轉(zhuǎn)換成List,然后使用lapply函數(shù)。我們建立一個(gè)學(xué)生名字,年齡和成績的Data Frame,然后統(tǒng)計(jì)平均年齡和平均成績,由于name列不是數(shù)值類型,所以無法算平均值,所以我們可以對(duì)非數(shù)值的數(shù)據(jù)只取count數(shù)量。這里就需要用到自定義函數(shù)。函數(shù)可以是匿名函數(shù),也可以是之前定義好的函數(shù),由于這里邏輯簡單,我們可以用匿名函數(shù)解決。s<-data.frame(name=c("Devin","Edward","Lulu"),age=c(30,33,29),score=c(95,99,90))

name age score

1 Devin 30 95

2 Edward 33 99

3 Lulu 29 90

lapply(s,function(x){if(is.numeric(x)){mean(x)}else{length(x)}})

$name

[1] 3

$age

[1] 30.66667

$score

[1] 94.66667我們可以看到返回了一個(gè)List的結(jié)果,里面包含3個(gè)項(xiàng),每個(gè)項(xiàng)是函數(shù)執(zhí)行的結(jié)果。lapply返回的結(jié)果和傳入的List的結(jié)構(gòu)相同,傳入多少個(gè)Item,返回的也是多少個(gè)Item。Sapply

Sapply函數(shù)和Lapply函數(shù)很類似,也是對(duì)List進(jìn)行處理,只是在返回結(jié)果上,Sapply會(huì)根據(jù)結(jié)果的數(shù)據(jù)類型和結(jié)構(gòu),重新構(gòu)建一個(gè)合理的數(shù)據(jù)類型返回。調(diào)用格式如下:Apply(數(shù)據(jù),運(yùn)算函數(shù),函數(shù)的參數(shù),simplify = TRUE, USE.NAMES = TRUE)對(duì)于其中的simplify參數(shù),就是指明是否對(duì)返回的結(jié)果集重新組織,如果為FALSE,那么就相當(dāng)于lapply了。{if(is.numeric(x)){mean(x)}else{length(x)}})

name age score

3.00000 30.66667 94.66667

0.0000
1
關(guān)注作者
收藏
評(píng)論(0)

發(fā)表評(píng)論

暫無數(shù)據(jù)
推薦帖子