从dplyr管道的计算中排除当前观察结果

问题描述 投票:0回答:1

我想将当前的观察值从我应用于dplyr管道中的数据的函数中排除,因为我想知道没有该观察值的值。

为简单起见,让我们计算包括当前观察值并排除该观察值的均值。该解决方案应适用于其他计算或函数(在我的情况下,是DescTools包中的Gini函数)。

假设我们在三个不同的日期(天)查看三种不同冰块的冰价(ice_id =冰块标识符)。

da <- data.frame(ice_id = c(1,1,1,2,2,2,3,3,3), day = c(1,2,3,1,2,3,1,2,3), price = c(1.60,1.90,1.80,2.10,2.05,2.30,0.50,0.40,0.35))
da
  ice_id day price
1      1   1  1.60
2      1   2  1.90
3      1   3  1.80
4      2   1  2.10
5      2   2  2.05
6      2   3  2.30
7      3   1  0.50
8      3   2  0.40
9      3   3  0.35

我想增加一栏来表示包括当天在内的冰的平均价格,以及一栏来表示不包括当天在内的冰的平均价格。

da = da %>%
  group_by(ice_id) %>%
  mutate(mean_price = mean(price),
         mean_price_without = ?)

如何在没有当前观察值的情况下加上平均价格?

r function dplyr pipe transformation
1个回答
0
投票

在一般情况下,您可以使用map_dbl

library(dplyr)
library(purrr)
da %>%
  group_by(ice_id) %>%
  mutate(mean_price = mean(price),
         mean_price_without = map_dbl(row_number(), ~mean(price[-.x])))
© www.soinside.com 2019 - 2024. All rights reserved.