如何在 R 資料框中根據兩個因素查詢數值列的均值表?


要查詢 R 資料框中基於兩個因素的數值列的均值表,我們可以按照以下步驟操作:

  • 首先,建立一個包含兩個因素和一個數值列的資料框。

  • 然後,使用 tapply 函式根據因素列查詢數值列的均值表。

示例 1

讓我們建立一個如下所示的資料框:

 即時演示

Group1<-sample(c("I","II","III"),25,replace=TRUE)
Group2<-sample(c("Low","Medium","High"),25,replace=TRUE)
Score<-sample(1:100,25)
df<-data.frame(Group1,Group2,Score)
df

執行上述指令碼後,會生成以下輸出(由於隨機化,此輸出在您的系統上會有所不同):

輸出

  Group1 Group2 Score
1  III    Low    3
2  II    High    45
3  III  Medium   17
4  III    Low    50
5  I    Medium   40
6  III    Low    77
7  II   Medium   1
8  I     High    73
9  II    High    62
10 I     High    5
11 II   Medium   88
12 I     High    98
13 I    Medium   60
14 II    Low     84
15 III   Low     12
16 I    Medium   66
17 III  Medium   23
18 II    High    61
19 I     High    15
20 III   High    94
21 II   Medium   87
22 II   Medium   37
23 I    Medium   11
24 I     High    26
25 I    Medium   93

查詢基於兩個因素列的均值表

使用帶均值函式的 tapply 函式根據 Group1 和 Group2 列查詢 Score 列的均值:

 即時演示

Group1<-sample(c("I","II","III"),25,replace=TRUE)
Group2<-sample(c("Low","Medium","High"),25,replace=TRUE)
Score<-sample(1:100,25)
df<-data.frame(Group1,Group2,Score)
tapply(Score,list(df$Group1,df$Group2),mean)

輸出

    High Low Medium
I   43.4  NA  54.00
II  56.0 84.0 53.25
III 94.0 35.5 20.00

示例 2

讓我們建立一個如下所示的資料框:

 即時演示

f1<-sample(c("Male","Female"),25,replace=TRUE)
f2<-sample(c("Slow","Fast"),25,replace=TRUE)
Result<-sample(1:100,25)
dat<-data.frame(f1,f2,Result)
dat

執行上述指令碼後,會生成以下輸出(由於隨機化,此輸出在您的系統上會有所不同):

輸出

   f1  f2  Result
1 Male Slow   37
2 Male Fast   13
3 Female Fast 87
4 Male Slow   36
5 Male Fast   22
6 Female Fast 86
7 Male Slow   42
8 Female Fast 17
9 Female Slow 46
10 Male Fast  27
11 Female Fast 49
12 Male Slow   24
13 Male Fast   53
14 Male Fast    67
15 Female Fast 28
16 Male Fast    6
17 Female Slow 61
18 Male Slow   90
19 Male Fast   12
20 Male Fast   47
21 Female Fast 9
22 Female Fast 66
23 Male Fast   73
24 Male Slow   14
25 Female Fast 81

查詢基於兩個因素列的均值表

使用帶均值函式的 tapply 函式根據 f1 和 f2 列查詢 Result 列的均值:

 即時演示

f1<-sample(c("Male","Female"),25,replace=TRUE)
f2<-sample(c("Slow","Fast"),25,replace=TRUE)
Result<-sample(1:100,25)
dat<-data.frame(f1,f2,Result)
tapply(Result,list(dat$f1,dat$f2),mean)

輸出

         Fast   Slow
Female 52.87500 53.5
Male   35.55556 40.5

更新於: 2021年8月11日

400 次瀏覽

啟動您的 職業生涯

透過完成課程獲得認證

開始
廣告

© . All rights reserved.