【问题标题】:calculate mean for each gamble and create a new column [duplicate]计算每次赌博的平均值并创建一个新列[重复]
【发布时间】:2013-09-09 06:00:51
【问题描述】:

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

 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

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

【问题讨论】:

    标签: r mean


    【解决方案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
    

    【讨论】:

      【解决方案2】:

      这是一个非常基本的问题,您可能可以在 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 的输出与其输入的长度相同。

      【讨论】:

      • 或者干脆within(new, newColumn &lt;- ave(reward, gamble))
      • @Ferdinand.kraft,只是好奇:您想在评论中指出什么? within?使用ave时不需要指定mean
      猜你喜欢
      • 2014-03-07
      • 2016-08-17
      • 2021-07-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-02
      • 1970-01-01
      相关资源
      最近更新 更多