0

3つの変数(ACCとタイプおよびID)を含むデータフレームがあります。ACCは決定の精度を指し、タイプは参加者の決定タイプごとに15回繰り返される30の異なる決定タイプを指し、IDは参加者に。次のようになります。

ID     ACC     Type
1       1       1
1       0       3   
1       1      10
etc...
2       1       5
2       0      13
2       0      11
etc...

私の目的は、参加者間の各意思決定タイプの精度を分析し、データをデータフレームにマージすることです。そのような:

ID    ACC_Type1     ACC_Type2 […]  ACC_Type30
1       70             65             87
2       65             50             90
etc...

これまでのところ、決定タイプを個別にサブセット化することで計算できましたが、決定タイプの値を個別に入力しないようにするためのよりスマートな方法を探しています。

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") 

どんな助けでも大歓迎です!

4

3 に答える 3

5

アナンダのデータを使用すると、次のように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
于 2013-03-24T20:42:10.170 に答える
1

サブセット化で行っているのはやり過ぎです。への基本的な呼び出しaggregateで十分です。さらに、必要な出力を取得するには、を使用する必要がありますreshape。次に例を示します。

サンプルデータ:

set.seed(1)
mydf <- data.frame(
  ID = rep(1:3, each = 6),
  ACC = sample(0:5, 18, replace = TRUE),
  TYPE = rep(1:3, 6)
)

ステップ1:集計

temp <- aggregate(ACC ~ ID + TYPE, mydf, mean)
temp
#   ID TYPE ACC
# 1  1    1 3.0
# 2  2    1 2.5
# 3  3    1 3.0
# 4  1    2 1.5
# 5  2    2 2.0
# 6  3    2 3.0
# 7  1    3 4.0
# 8  2    3 2.0
# 9  3    3 4.5

ステップ2:形を変える

reshape(temp, direction = "wide", idvar = "ID", timevar = "TYPE")
#   ID ACC.1 ACC.2 ACC.3
# 1  1   3.0   1.5   4.0
# 2  2   2.5   2.0   2.0
# 3  3   3.0   3.0   4.5

アップデート

dcastfrom "reshape2"は、fun.aggregate引数を使用してこれを1つのステップで処理できますが、名前を修正するためにクリーンアップを行う必要があります。

> dcast(mydf, ID ~ TYPE, fun.aggregate = mean, value.var = "ACC")
  ID   1   2   3
1  1 3.0 1.5 4.0
2  2 2.5 2.0 2.0
3  3 3.0 3.0 4.5
于 2013-03-24T20:09:45.007 に答える
0

DT があなたの場合data.table、次を使用できますby=Type (もちろん、いくつかのサンプルデータを投稿すると、より正確な回答を生成するのに役立ちます):

しかし、このようなものは機能するはずです

  DT[,  mean(ACC),  by = Type]
于 2013-03-24T20:06:11.883 に答える