如何在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 次浏览

启动您的职业生涯

通过完成课程获得认证

开始
广告