精品伊人久久大香线蕉,开心久久婷婷综合中文字幕,杏田冲梨,人妻无码aⅴ不卡中文字幕

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
30 天學會R DAY 13:apply族函數:用來批量作業的函數

第13天 apply族函數的應用


R語言中,apply族函數是非常重要的函數,它在很多場景下,可以代替循環語句,簡化程序寫作過程,實現高效的統計分析,因此我們稱之為批量處理函數。利用apply族函數可將某函數作用到一系列數據對象上,包括標量、向量、矩陣、多維數組、數據框、列表。我們可以同時納入多個向量、數據庫、列表、變量,進行變量的轉換、統計描述。  此外,apply函數另外一個優勢是它可以批量開展自編或者系統自帶函數的運算。

1. 函數apply()

對數據對象的一個維度,都作用上某函數,生成列表、多維數組或向量?;靖袷綖椋?/span>

apply(x, MARGIN=..., fun, ...)

其中,x為數據對象(矩陣、多維數組、數據框);MARGIN=1表示按行,2表示按列;fun表示要作用的函數。

通常來說,apply函數經常用來計算矩陣中行或列的均值、和值的函數。

> x<-matrix(1:6,ncol=2)  

> x

    [,1] [,2]

[1,]    1    4

[2,]    2    5

[3,]    3    6

> apply(x,1,mean) #按行求均值

[1] 2.5 3.5 4.5

> apply(x,2,mean) #按列求均值

[1] 2 5

2. 函數lapply()

對數據對象的每一個元素,都作用上某函數,生成一個與元素個數相同的值列表?;靖袷綖椋?/span>

lapply(x, fun, ...)

其中,x為數據對象(列表、數據框、向量)。

lapply對每列進行操作,非常適合數據框;在R中數據框是一種特殊的列表,所以數據框的列也將作為函數的處理對象。 

> x<-list(a=1:5,b=exp(0:3))

> x

$a

[1] 1 2 3 4 5

$b

[1]  1.000000  2.718282  7.389056 20.085537

> lapply(x,mean)

$a

[1] 3

$b

[1] 7.798219

3. 函數sapply()

基本格式為:

lapply(x, fun, ..., simplify=TRUE, USE.NAMES=...)

比函數lapply()多了一個參數simplify,若simplify=FALSE,則同lapply();若為TRUE,則將輸出的list簡化為向量或矩陣;若USE.NAMES為TRUE,且x為字符型,則用x作為結果的名稱。

simplify=F:返回值的類型是list,此時與lapply完全相同

simplify=T(默認值):返回值的類型由計算結果定,如果函數返回值長度為1,則sapply將list簡化為vector;

> sapply(x, mean, simplify = TRUE) #x同上例

      a        b

3.000000 7.798219

> list<-list(c("a","b","c"),c("A","B","C"))

> list

[[1]]

[1] "a" "b" "c"

[[2]]

[1] "A" "B" "C"

#將列表list中的元素與數字1~3連接

> sapply(list, paste, 1:3, simplify = TRUE)

    [,1]  [,2]

[1,] "a 1" "A 1"

[2,] "b 2" "B 2"

[3,] "c 3" "C 3"

> sapply(list, paste, 1:3, simplify = FALSE)

[[1]]

[1] "a 1" "b 2" "c 3"

[[2]]

[1] "A 1" "B 2" "C 3"

4. 函數tapply()

對不規則陣列,對照一組確定因子作用某函數?;靖袷綖椋?/span>

tapply(x, INDEX, fun, ..., simplify=TRUE)

其中,x通常為向量;INDEX為與x長度相同的因子列表(若不是因子,R會強制轉化為因子);simplify=TRUE(默認)且fun計算結果為標量值,則返回值為數組,若為FALSE,則返回值為list對象。

x是需要處理的向量,INDEX是因子(因子列表),FUN是需要執行的函數,simplify指是否簡化輸入結果(考慮sapply對于lapply的簡化)

x可以是數據庫的一個變量,也可以是單獨的向量。

> height<-c(174,165,180,171,160)

> sex<-c("F","F","M","M","F")

> tapply(height,sex,mean) #計算不同sex對應的height的均值

      F        M

166.3333 175.5000

5. 函數mapply()

是函數sapply()的多變量版本,將對多個變量的每個參數作用某函數。基本格式為:

mapply(fun, MoreArgs=NULL, SIMPLIFY=TRUE, USE.NAMES=TRUE)

其中,MoreArgs為fun函數的其它參數列表;SIMPLIFY為邏輯值或字符串,取值為TRUR時,將結果轉化為一個向量、矩陣或高維陣列(但不是所有結果都可轉化)。

 #重復生成列表list(x=1:2), 重復次數times=1:3,結果為列表

> mapply(rep, times=1:3, MoreArgs = list(x=1:2))

[[1]]

[1] 1 2

[[2]]

[1] 1 2 1 2

[[3]]

[1] 1 2 1 2 1 2

 #重復生成列表list(x=1:2), 重復次數times=c(2,2),結果為矩陣

> mapply(rep, times=c(2,2), MoreArgs = list(x=1:2))

    [,1] [,2]

[1,]    1    1

[2,]    2    2

[3,]    1    1

[4,]    2    2

6. 醫學數據分析中apply族的應用

對于醫學數據而言,實際上很多情況我們不太會把所有的行,或者所有的列求一個均數或者求一個中位數,但是其它函數就會用的比較多。比如,我們要看看各個變量的缺失值數據,比如把很多數值變量因子化。

我們先導入數據庫elder1和elder2

t1<-read_csv("elder1.csv")

t2<-read_csv("elder2.csv")

查看變量的類型

sapply(t1,class)

是不是都是數字變量呢

sapply(t1,is.numeric)

把部分變量轉為因子

vars<-c(“sex”,”marriage”,”education”,”huji”,”income”,”smoking”)

t2[vars] <- lapply(t2[vars], factor)

分組計算均數

tapply(t2$health,t2$sex,mean, na.rm = TRUE)

分組計數

tapply(t2$marriage,t2$sex,table)

看看到底各變量有多少缺失值

 naf<-function(x){

 nas<-sum(is.na(x))

 return(nas)

}

apply(t1,2, naf)

這段程序就是自編與apply族函數的聯合。光apply族函數無法直接計算每一個變量的缺失值個數,但是我們用自編函數把is.na ()和sum()進行整合,形成新的函數naf,那么我們就可以進行批量操作了。

Apply族函數無論是在變量轉換、數據統計描述甚至是統計分析,都具有一定的價值。它的批量作業法使它變成R語言非常重要系列函數。

DAY13的內容就介紹到這里!

最后,一個月就能學會R語言,你敢挑戰一下嗎?

想挑戰的話,請加入R語言的交流群吧?(由于群規模限制,請先加入鄭老師微信號:掃描以下二維碼,并注明R語言)

本站僅提供存儲服務,所有內容均由用戶發布,如發現有害或侵權內容,請點擊舉報
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
R語言apply函數家族詳解
R中的高效批量處理函數(lapply sapply apply tapply mapply)
R中利用apply、tapply、lapply、sapply、mapply、table等函數進行分組統計
掌握R語言中的apply函數族 | 粉絲日志
R語言里面的apply()家族簡述
R數據分析:apply()的各種變體你分清了嗎?
更多類似文章 >>
生活服務
分享 收藏 導長圖 關注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點擊這里聯系客服!

聯系客服

主站蜘蛛池模板: 呼伦贝尔市| 柯坪县| 铜梁县| 拉萨市| 杭锦后旗| 武夷山市| 拉孜县| 平乡县| 四川省| 涟水县| 延川县| 明光市| 绵竹市| 辽源市| 千阳县| 永吉县| 罗山县| 阳曲县| 凭祥市| 玛纳斯县| 博爱县| 堆龙德庆县| 永仁县| 阳曲县| 嵊州市| 石阡县| 措勤县| 固原市| 固阳县| 营口市| 泰宁县| 双辽市| 黔南| 霍城县| 关岭| 冕宁县| 北宁市| 宁乡县| 长顺县| 临湘市| 翼城县|