資料彙總丨數析學院

weixin_34337265發表於2016-08-19

問題

在R中,如何對分組的資料進行彙總(統計其均值、方差等)?

指南

下文中將介紹三種可用於對根據特定變數分組後的資料分別呼叫匯總函式(例如均值、標準差等等)的方法。

ddply()函式:這是最為簡便的方法,需要呼叫plyr包,我們在此大力推薦大家使用。

summarizeBy()函式:這也是個相對簡單的方法,需要呼叫doBy包。

aggregate()函式:這個函式內建於R的原封安裝中,相對來說使用起來會較為複雜一點。

假設我們擁有如下資料,根據資料中樣本性別和條件的不同,我們可以將其分為F-placeboF-aspirinM-placeboM-aspirin四個組別。我們的任務是,分別統計每個組別中的樣本個數、變數change的均值、標準差以及其均值標準誤。

1818544-ba9410566aa504d6.png

使用ddply

1818544-7c67f8321f34adbe.png

缺失值處理

如果資料中存在確實值NA,那我們就需要對每一個函式設定引數na.rm=TRUE。函式length()沒有內建na.rm選項,所以對於這種情況我們需要使用sum(!is.na(...))語句,來確認資料集中有多少的非缺失值。

1818544-5e0860b7ef7e022a.png

一個用於樣本計數以及計算均值、標準差、均值標準誤和置信區間的函式

有時我們不需要像上文所述方法一樣手動的取指定我們需要用於標準差計算的值,構建一個函式便能幫我們搞定以下所有的事:

計算均值、計算標準差、樣本計數

計算均值標準誤(友情提示,這個值在計算過程中不會用到組內變數。更多詳情見../../Graphs/Plotting means and error bars (ggplot2))

計算95%的置信區間(或是其他你所需求的數值)

對列進行重新命名從而使結果資料集更便於進一步的操作

為了使用這個函式,我們需要在進行計算前先把下面的程式碼貼上到自己的程式中:

1818544-4fbd6974f011e3bf.png
1818544-d3a8e84ff40f74d0.png

運用例項:summarySE函式幫你一步搞定

1818544-33700b63d696b4e5.png

用NA來填充資料集中為空的組合情況

有些時候,彙總資料框中會存在一些空的因素組合情況,也就是說,這些組合理論上是可以存在的,但是並沒有實際出現在我們的原始資料集中。有時,我們需要在資料框中用NA值對將這樣的組合對應的內容進行替換填充。要完成這一點,我們需要在呼叫ddply和summarySE的相關語句時設定引數.drop=FALSE。

運用例項:

1818544-ad0d398c6a83f095.png

使用

使用summarizeBy()對資料進行摺疊彙總:

1818544-e868294cc15c53dd.png

需要注意的是,這樣的均值標準誤並不適用於組內變數的比較更多詳情見../../Graphs/Plotting means and error bars (ggplot2)

缺失值處理

如果資料中存在缺失值NA,那我們就需要對每一個函式設定引數na.rm=TRUE。函式length()沒有內建na.rm選項,所以對於這種情況我們需要使用sum(!is.na(...))語句,來確認資料集中有多少的非缺失值。

1818544-7149c6f3d3d0fa28.png

一個用於樣本計數以及計算均值、標準差、均值標準誤和置信區間的函式

和對ddply包的使用類似的,通過組合運用doBy包中的函式,我們也可以構建一個類似的函式summarySE,幫我們搞定以下所有的事:

計算均值、計算標準差、樣本計數

計算均值標準誤(友情提示,這個值在計算過程中不會用到組內變數。更多詳情見../../Graphs/Plotting means and error bars (ggplot2))

計算95%的置信區間(或是其他你所需求的數值)

對列進行重新命名從而使結果資料集更便於進一步的操作

為了使用這個函式,我們需要在進行計算前先把下面的程式碼貼上到自己的程式中:

1818544-bbbe99fdb6d81431.png
1818544-1ae4bc81721867d0.png

運用例項:summarySE函式幫你一步搞定

1818544-67d287128c4276d4.png

用NA來填充資料集中為空的組合情況

有些時候,彙總資料框中會存在一些空的因素組合情況,也就是說,這些組合理論上是可以存在的,但是並沒有實際出現在我們的原始資料集中。有時,我們需要在資料框中用NA值對將這樣的組合對應的內容進行替換填充。

下面的函式將幫助我們將0值填充入所有的空缺組合對應的內容:

1818544-d3bb03169e007018.png

運用例項:

1818544-da916d2d93f39721.png

使用

aggregate函式使用起來可能相對繁瑣一些,但由於它是R自帶的內建函式,因而我們在使用它之前不必安裝其他的程式包。

1818544-a164802b926f8997.png
1818544-dc6cd3e328c8067f.png
1818544-8e6d5ab34afe0008.png

如果你想要無視資料集中存在的NA值,請設定引數na.rm=TRUE,如下所示:

1818544-165b80093c1cb925.png

掃描關注「資料工匠」微訊號:

1818544-53a068f8d92271cd.png

相關文章