如何在R的data.table物件中,根據其他列名和這些列中的公共值,找到某列的平均值?


為了在R的data.table物件中,根據其他列名和這些列中的公共值,找到某列的平均值,我們可以按照以下步驟操作:

  • 首先,建立一個data.table物件。

  • 然後,使用reshape2包中的melt函式來熔化data.table物件。

  • 之後,使用dcast函式根據其他列名和這些分組列中的公共值(0,1,2)來計算某列的平均值。

示例

建立data.table物件

讓我們建立一個如下所示的data.table物件:

library(data.table)
ID<-LETTERS[1:25]
f1<-sample(0:2,25,replace=TRUE)
f2<-sample(0:2,25,replace=TRUE)
DV<-rnorm(25)
DT<-data.table(ID,f1,f2,DV)
DT

輸出

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

    ID f1  f2      DV
1:  A  0   2   -0.43728169
2:  B  0   2    0.94425821
3:  C  2   2   -0.36174159
4:  D  2   0   -1.61506759
5:  E  0   1   -0.91609245
6:  F  0   0   -1.59289758
7:  G  1   2   -0.91523489
8:  H  0   0   -1.21002004
9:  I  0   1    0.84662264
10: J  1   0    1.08053374
11: K  0   0    1.30727422
12: L  1   0    0.66752310
13: M  1   0   -1.06868916
14: N  1   0   -0.04441251
15: O  2   2    1.47602752
16: P  2   0   -1.24926504
17: Q  2   2    1.01722018
18: R  1   2   -1.88543815
19: S  0   0   -2.13536456
20: T  0   0   -0.30234787
21: U  0   1   -0.17677848
22: V  1   1   -0.34633266
23: W  2   2    0.98363925
24: X  0   0    0.78338684
25: Y  0   2   -0.35833690
    ID f1 f2       DV

熔化data.table物件

使用reshape2包中的melt函式來熔化data.table物件DT:

library(data.table)
ID<-LETTERS[1:25]
f1<-sample(0:2,25,replace=TRUE)
f2<-sample(0:2,25,replace=TRUE)
DV<-rnorm(25)
DT<-data.table(ID,f1,f2,DV)
library(reshape2)
DT_new<-melt(DT,id.vars=c("ID","DV"))
DT_new

輸出

   ID  DV         variable value
1  A  -0.43728169  f1       0
2  B   0.94425821  f1       0
3  C  -0.36174159  f1       2
4  D  -1.61506759  f1       2
5  E  -0.91609245  f1       0
6  F  -1.59289758  f1       0
7  G  -0.91523489  f1       1
8  H  -1.21002004  f1       0
9  I   0.84662264  f1       0
10 J   1.08053374  f1       1
11 K   1.30727422  f1       0
12 L   0.66752310  f1       1
13 M  -1.06868916  f1       1
14 N  -0.04441251  f1       1
15 O   1.47602752  f1       2
16 P  -1.24926504  f1       2
17 Q   1.01722018  f1       2
18 R  -1.88543815  f1       1
19 S  -2.13536456  f1       0
20 T  -0.30234787  f1       0
21 U  -0.17677848  f1       0
22 V  -0.34633266  f1       1
23 W   0.98363925  f1       2
24 X   0.78338684  f1       0
25 Y  -0.35833690  f1       0
26 A  -0.43728169  f2       2
27 B   0.94425821  f2       2
28 C  -0.36174159  f2       2
29 D  -1.61506759  f2       0
30 E  -0.91609245  f2       1
31 F  -1.59289758  f2       0
32 G  -0.91523489  f2       2
33 H  -1.21002004  f2       0
34 I   0.84662264  f2       1
35 J   1.08053374  f2       0
36 K   1.30727422  f2       0
37 L   0.66752310  f2       0
38 M  -1.06868916  f2       0
39 N  -0.04441251  f2       0
40 O   1.47602752  f2       2
41 P  -1.24926504  f2       0
42 Q   1.01722018  f2       2
43 R  -1.88543815  f2       2
44 S  -2.13536456  f2       0
45 T  -0.30234787  f2       0
46 U  -0.17677848  f2       1
47 V  -0.34633266  f2       1
48 W   0.98363925  f2       2
49 X   0.78338684  f2       0
50 Y  -0.35833690  f2       2

根據其他列名和公共值查詢某列的平均值

使用dcast函式根據列名f1和f2以及這些分組列中的公共值0、1和2來查詢DV的平均值:

library(data.table)
ID<-LETTERS[1:25]
f1<-sample(0:2,25,replace=TRUE)
f2<-sample(0:2,25,replace=TRUE)
DV<-rnorm(25)
DT<-data.table(ID,f1,f2,DV)
library(reshape2)
DT_new<-melt(DT,id.vars=c("ID","DV"))
dcast(DT_new,variable~value,value.var="DV",fun.aggregate=mean)

輸出

   variable      0           1         2
1    f1      -0.2706315 -0.3588644 0.04180212
2    f2      -0.4482789 -0.1481452 0.05145688

更新於:2021年11月8日

67 次瀏覽

啟動您的職業生涯

透過完成課程獲得認證

開始
廣告
© . All rights reserved.