我想计算每次赌博的奖励平均值,并根据这一点创建一个新列。例如,这是我的数据:
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
非常感谢你...我真的很困惑......
答案 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
使用的默认函数;我已将其包含在内,以便您可以看到可以添加其他聚合函数。
与许多其他聚合函数(aggregate
,tapply
等)不同,ave
的输出与其输入的长度相同。