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 回答