分組計(jì)算描述性統(tǒng)計(jì)量函數(shù)—by()函數(shù)

《R語(yǔ)言實(shí)戰(zhàn)》這本書上是這樣描述by()函數(shù)的:

使用by()分組計(jì)算描述性統(tǒng)計(jì)量,它可以一次返回若干個(gè)統(tǒng)計(jì)量表牢。格式為:
by(data, INDICES, FUN)
其中data是一個(gè)數(shù)據(jù)框或矩陣;INDICES是一個(gè)因子或因子組成的列表,定義了分組;FUN是任意函數(shù)竹祷。

簡(jiǎn)單點(diǎn)說(shuō)by(data, INDICES, FUN)函數(shù)的典型用法: 是將data數(shù)據(jù)框或矩陣按照INDICES因子水平進(jìn)行分組谈跛,然后對(duì)每組應(yīng)用FUN函數(shù)羊苟。
是不是沒(méi)懂?反正看完后我沒(méi)懂~


下面我們通過(guò)實(shí)例來(lái)理解下by()函數(shù):
我們假設(shè)2019年第二季度Jimmy老師收了五個(gè)學(xué)徒

  • 他們姓名分別是:xg感憾;xj蜡励;hj;wh阻桅;xs凉倚;
  • 他們年紀(jì)分別是:23;24嫂沉;25稽寒;26;27趟章;
  • 他們的性別分別是:male杏糙;female;female蚓土;male宏侍;female

將以上學(xué)徒信息構(gòu)建成數(shù)據(jù)框蜀漆,存到biotrainee變量名中:

biotrainee <- data.frame(name = c('xg','xj','hj','wh','xs'),
                         gender = c('male','female','female','male','female'),
                         ages = c(23,24,25,26,27))
> biotrainee  #看下數(shù)據(jù)框內(nèi)容
  name gender ages
1   xg   male   23
2   xj female   24
3   hj female   25
4   wh   male   26
5   xs female   27

學(xué)徒信息純屬虛構(gòu)谅河,如有雷同純屬巧合

我們想要將所有學(xué)徒按照性別分組,并分別計(jì)算每組學(xué)徒年齡的平均值,就可以通過(guò)by()函數(shù)來(lái)實(shí)現(xiàn)绷耍,我們體會(huì)一下:by(biotrainee,biotrainee$gender,function(x) mean(x[,2]))

> by(biotrainee,biotrainee$gender,function(x) mean(x[,3]))
biotrainee$gender: female
[1] 25.33333
----------------------------------------------------------------------------- 
biotrainee$gender: male
[1] 24.5

by做了什么吐限?將第一個(gè)參數(shù)(學(xué)徒姓名)按照第二個(gè)參數(shù)(性別)進(jìn)行分組,然后每組應(yīng)用第三個(gè)參數(shù)所定義的函數(shù)(求每組第三列即年齡的平均值)锨天。
還沒(méi)懂毯盈?沒(méi)關(guān)系,來(lái)個(gè)示意圖:


熟悉split()函數(shù)的可以看出病袄,按照gender列分組那步搂赋,split()函數(shù)可以到達(dá)同樣的效果:split(biotrainee,biotrainee$gender)

> split(biotrainee,biotrainee$gender)
$`female`
  name gender ages
2   xj female   24
3   hj female   25
5   xs female   27

$male
  name gender ages
1   xg   male   23
4   wh   male   26

split()函數(shù)分好組之后,我們?cè)儆?code>lapply就可以看到:

> lapply(split(biotrainee,biotrainee$gender),function(x) mean(x[,3]))
$`female`
[1] 25.33333

$male
[1] 24.5

lapply()中的 “l(fā)” 代表list益缠,它接受list作為輸入脑奠,并將指定的操作應(yīng)用于列表中的所有元素。在list上逐個(gè)元素調(diào)用FUN函數(shù)幅慌∷纹郏可以用于data.frame上,因?yàn)?code>data.frame是一種特殊形式的list胰伍。

到這里by()函數(shù)的用法就講完了齿诞,只講基本用法,不講在實(shí)際數(shù)據(jù)分析過(guò)程中能解決什么問(wèn)題骂租?還是那句話祷杈,不是我的風(fēng)格~


這幾天我在看Jimmy老師在B站上的GEO數(shù)據(jù)挖掘視頻課程,課程里介紹到GEO數(shù)據(jù)挖掘分析流程:看文章找GSE編號(hào) --> 到GEO數(shù)據(jù)庫(kù)搜索下載數(shù)據(jù) --> 提取表達(dá)矩陣exp --> id轉(zhuǎn)換....
在id轉(zhuǎn)換過(guò)程中渗饮,經(jīng)過(guò)一系列處理我們得到了ids但汞,它與我們提取的表達(dá)矩陣exp的探針順序一一對(duì)應(yīng):

> head(ids)
  probe_id    symbol
1  7896759 LINC01128
2  7896761    SAMD11
3  7896779    KLHL17
4  7896798   PLEKHN1
5  7896817     ISG15
6  7896822      AGRN
> head(exp)
        GSM1052615 GSM1052616 GSM1052617 GSM1052618 GSM1052619 GSM1052620
7896759    8.75126    8.61650    8.81149    8.32067    8.41445    8.45208
7896761    8.39069    8.52617    8.43338    9.17284    9.10216    9.14120
7896779    8.20228    8.30886    8.18518    8.13322    8.06453    8.15884
7896798    8.41004    8.37679    8.27521    8.34524    8.35557    8.44409
7896817    7.72204    7.74572    7.78022    7.72308    7.53797    7.73401
7896822    9.19237    9.10929    9.03668    9.94821    9.96994    9.99839

這時(shí),我們就可以對(duì)表達(dá)矩陣exp進(jìn)行分組互站,將同一個(gè)symbol所對(duì)應(yīng)的多個(gè)探針?lè)殖刹煌慕M私蕾,并對(duì)每組探針進(jìn)行統(tǒng)計(jì):計(jì)算每組中每行探針表達(dá)量的平均值(也就是每個(gè)探針在6個(gè)樣本中表達(dá)量的均值rowMeans(x)),再取平均值最大的那個(gè)探針作為該symbol所對(duì)應(yīng)的唯一探針胡桃,我們上面講的by()函數(shù)就可以完成以上操作:

tmp = by(exp,
         ids$symbol,
         function(x) rownames(x)[which.max(rowMeans(x))])
probes = as.character(tmp)

第二個(gè)參數(shù)ids$symbol定義了分組踩叭,將第一參數(shù)—exp表達(dá)矩陣分成了若干個(gè)小矩陣,每個(gè)小矩陣?yán)锎娣胖粋€(gè)symbol所對(duì)應(yīng)的所有探針翠胰。第三個(gè)參數(shù)是我們自己定義的函數(shù):計(jì)算每個(gè)小矩陣中每行探針表達(dá)量的平均值(也就是每個(gè)探針在6個(gè)樣本中表達(dá)量的均值rowMeans(x))容贝,再取平均值最大的那個(gè)探針作為該symbol所對(duì)應(yīng)的唯一探針which.max(rowMeans(x))
by()函數(shù)就可以返回每個(gè)分組里的統(tǒng)計(jì)結(jié)果亡容,即每個(gè)symbol所對(duì)應(yīng)的唯一探針I(yè)Dprobe_id嗤疯,存放在tmp里。用probes = as.character(tmp)將結(jié)果變?yōu)榧冏址拖蛄浚?/p>

> head(tmp)
INDICES
     A1CF       A2M     A2ML1   A3GALT2    A4GALT     A4GNT 
"7933640" "7960947" "7953775" "7914643" "8076497" "8090955" 
> head(probes)
[1] "7933640" "7960947" "7953775" "7914643" "8076497" "8090955"
> 
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末闺兢,一起剝皮案震驚了整個(gè)濱河市茂缚,隨后出現(xiàn)的幾起案子戏罢,更是在濱河造成了極大的恐慌,老刑警劉巖脚囊,帶你破解...
    沈念sama閱讀 217,657評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件龟糕,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡悔耘,警方通過(guò)查閱死者的電腦和手機(jī)讲岁,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)衬以,“玉大人缓艳,你說(shuō)我怎么就攤上這事】淳” “怎么了阶淘?”我有些...
    開(kāi)封第一講書人閱讀 164,057評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)互妓。 經(jīng)常有香客問(wèn)我溪窒,道長(zhǎng),這世上最難降的妖魔是什么冯勉? 我笑而不...
    開(kāi)封第一講書人閱讀 58,509評(píng)論 1 293
  • 正文 為了忘掉前任澈蚌,我火速辦了婚禮,結(jié)果婚禮上灼狰,老公的妹妹穿的比我還像新娘宛瞄。我一直安慰自己,他們只是感情好伏嗜,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,562評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布坛悉。 她就那樣靜靜地躺著伐厌,像睡著了一般承绸。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上挣轨,一...
    開(kāi)封第一講書人閱讀 51,443評(píng)論 1 302
  • 那天军熏,我揣著相機(jī)與錄音,去河邊找鬼卷扮。 笑死荡澎,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的晤锹。 我是一名探鬼主播摩幔,決...
    沈念sama閱讀 40,251評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼鞭铆!你這毒婦竟也來(lái)了或衡?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 39,129評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎封断,沒(méi)想到半個(gè)月后斯辰,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,561評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡坡疼,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,779評(píng)論 3 335
  • 正文 我和宋清朗相戀三年彬呻,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片柄瑰。...
    茶點(diǎn)故事閱讀 39,902評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡闸氮,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出教沾,到底是詐尸還是另有隱情湖苞,我是刑警寧澤,帶...
    沈念sama閱讀 35,621評(píng)論 5 345
  • 正文 年R本政府宣布详囤,位于F島的核電站财骨,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏藏姐。R本人自食惡果不足惜隆箩,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,220評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望羔杨。 院中可真熱鬧捌臊,春花似錦、人聲如沸兜材。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,838評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)曙寡。三九已至糠爬,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間举庶,已是汗流浹背执隧。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 32,971評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留户侥,地道東北人镀琉。 一個(gè)月前我還...
    沈念sama閱讀 48,025評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像蕊唐,于是被迫代替她去往敵國(guó)和親屋摔。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,843評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容