如何动态子集值并计算均值

use*_*323 0 aggregate r subset plyr

我有一个包含三个变量(ACC和类型和ID)的数据框,其中ACC指的是决策的准确性,类型是指30种不同的决策类型,对于参与者的每种决策类型重复15次,ID指的是对参与者.它看起来像这样:

ID     ACC     Type
1       1       1
1       0       3   
1       1      10
etc...
2       1       5
2       0      13
2       0      11
etc...
Run Code Online (Sandbox Code Playgroud)

我的目标是分析参与者中每种决策类型的准确性,并将数据合并到数据框中.如:

ID    ACC_Type1     ACC_Type2 […]  ACC_Type30
1       70             65             87
2       65             50             90
etc...
Run Code Online (Sandbox Code Playgroud)

到目前为止,我能够通过单独分组决策类型来计算,但是,我正在寻找一种更智能的方法来避免单独键入决策类型值:

library(data.table)
library(plyr)
dt <- data.table(d,key="Type")
dt_Type1<-data.frame (aggregate(ACC~ID,data=subset(dt,Type==1),mean))
dt_Type2<-data.frame (aggregate(ACC~ID,data=subset(dt,Type==2),mean))
[]
dt_Type30<-data.frame (aggregate(ACC~ID,data=subset(dt,Type==30),mean))

total <- merge(dt_Type1,dt_Type2 […] Type30,by="ID") 
Run Code Online (Sandbox Code Playgroud)

任何帮助表示赞赏!

Aru*_*run 5

使用Ananda的数据,可以获得以下data.table解决方案:

require(data.table)
dt <- data.table(mydf)
setkey(dt, "TYPE", "ID")
dt[, mean(ACC), by=key(dt)][, setattr(as.list(V1), 'names', 
                paste0("ACC", ID)), by=TYPE]
#    TYPE ACC1 ACC2 ACC3
# 1:    1  3.0  2.5  3.0
# 2:    2  1.5  2.0  3.0
# 3:    3  4.0  2.0  4.5
Run Code Online (Sandbox Code Playgroud)