2

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

 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

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

4

2 回答 2

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
于 2013-09-09T06:28:59.933 回答
0

这是一个非常基本的问题,您可能可以在 SO 上找到很多示例。在 base 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与其输入的长度相同。

于 2013-09-09T06:07:42.627 回答