计算每次赌博的平均值并创建一个新列

时间:2013-09-09 06:00:51

标签: r mean

我想计算每次赌博的奖励平均值,并根据这一点创建一个新列。例如,这是我的数据:

 gamble<-c(1,2,3,4,2,3,4,1)
 reward <- c(1,0.5,0.5,0.4,0.5,0.4,0.2,0.5)
 new<-data.frame(gamble, reward)

,新列应如下所示:

gamble reward newcolumn
   1    1.0      0.75
   2    0.5      0.50
   3    0.5      0.45
   4    0.4      0.30
   2    0.5      0.50
   3    0.4      0.45
   4    0.2      0.30
   1    0.5      0.75

非常感谢你...我真的很困惑......

2 个答案:

答案 0 :(得分:1)

如果你正在处理一个非常大的数据库,并且你真的关心时间,那么data.table方法是一个非常好的选择:

> library(data.table)
> DT <- data.table(new)
> DT[, newColumn:=mean(reward), by=gamble]
> DT
   gamble reward newColumn
1:      1    1.0      0.75
2:      2    0.5      0.50
3:      3    0.5      0.45
4:      4    0.4      0.30
5:      2    0.5      0.50
6:      3    0.4      0.45
7:      4    0.2      0.30
8:      1    0.5      0.75

答案 1 :(得分:0)

这是一个非常基本的问题,你可以在SO上找到很多例子。在基数R中,您可以使用ave来获取您正在寻找的输出。

> new$newColumn <- with(new, ave(reward, gamble, FUN = mean))
> new
  gamble reward newColumn
1      1    1.0      0.75
2      2    0.5      0.50
3      3    0.5      0.45
4      4    0.4      0.30
5      2    0.5      0.50
6      3    0.4      0.45
7      4    0.2      0.30
8      1    0.5      0.75

在这种情况下,FUN = mean是可选的,因为这是ave使用的默认函数;我已将其包含在内,以便您可以看到可以添加其他聚合函数。

与许多其他聚合函数(aggregatetapply等)不同,ave的输出与其输入的长度相同。