0

次のようなデータフレームがあります。

  name  val type group
1 A3330 184 ave IX13
2 A3330 42  min IX13
3 A1473 195 ave IX01
4 A1473 93  min IX01
5 A3330 80  ave BG12
6 A3330 44  min BG12
7 A1473 15  ave IX3
8 A1473 91  min IX3

タイプが同じ場合、グループ間で val のすべての値を平均したいと思います。したがって、1 と 5 は、異なるグループであるにもかかわらず、平均化されます。同じことが 2 と 6、3 と 7、4 と 8 にも当てはまります。

name   val type
A3330  132 ave
A333   43  min
A1473  105 ave
A1473  92  min

私はこのようなことをすべきだと考えています:

for (metric in type)
 for(names in name)
  mean(df[df$name==names && type==metric, df$type])
 }
}

しかし、私の限られた R の経験では、ループよりも優れた方法が常にあります。助言がありますか?

4

1 に答える 1

2

自分でテストしたことはありませんが、data.tableパッケージを使用すると、このようなものがうまくいくはずです-

library(data.table)
df <- data.table(df)
df2 <- df[,
   list(
      meanval = mean(val)
   ),
   by = c('name','type')
]
于 2013-10-09T17:28:44.743 に答える