【问题标题】:Compute mean excluding current value计算不包括当前值的平均值
【发布时间】:2021-11-22 05:25:58
【问题描述】:

我有下表

   a b avg 
1: 1 7   3    
2: 1 0   3    
3: 1 2   3    
4: 2 1   2    
5: 2 3   2    

其中“a”和“b”是数据,“avg”计算按“a”分组的“b”的平均值。

现在我想计算按“a”分组的“b”的平均值(“avg2”),不包括当前值:

   a b avg    avg2
1: 1 7   3    1.00
2: 1 0   3    4.50
3: 1 2   3    3.50
4: 2 1   2    3.00
5: 2 3   2    1.00

我试过手动计算,

dt[ , (sum(b) - ?? )/(.N -1), by = a]

但我不知道如何填补分子中的空白。我想我有一个相关的问题是是否有办法在执行汇总计算时引用当前行。

【问题讨论】:

  • 糟糕,是的,我已经编辑了问题,现在它是正确的

标签: r data.table


【解决方案1】:

我不确定您的计算对于第 1 组是否正确,但您可以这样做 -

library(data.table)

setDT(df)[, avg2 := (sum(b) - b)/(.N -1), a]
df

#   a b avg avg2
#1: 1 7   3  1.0
#2: 1 0   3  4.5
#3: 1 2   3  3.5
#4: 2 1   2  3.0
#5: 2 3   2  1.0

【讨论】:

    【解决方案2】:

    使用dplyr

    library(dplyr)
    df1 %>%
        group_by(a) %>% 
        mutate(avg = (sum(b) - b)/(n() - 1))
    # A tibble: 5 × 3
    # Groups:   a [2]
          a     b   avg
      <int> <int> <dbl>
    1     1     7   1  
    2     1     0   4.5
    3     1     2   3.5
    4     2     1   3  
    5     2     3   1  
    

    【讨论】:

      猜你喜欢
      • 2017-01-02
      • 1970-01-01
      • 2019-04-03
      • 2016-10-02
      • 1970-01-01
      • 1970-01-01
      • 2021-02-08
      • 2018-04-09
      • 2020-05-06
      相关资源
      最近更新 更多