计算不包括当前值的平均值
Compute mean excluding current value
我有以下table
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]
但我不知道如何填补分子中的空白。我想我有一个相关的问题是在执行汇总计算时是否有办法引用当前行。
我不确定第 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
使用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
我有以下table
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]
但我不知道如何填补分子中的空白。我想我有一个相关的问题是在执行汇总计算时是否有办法引用当前行。
我不确定第 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
使用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