首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从dplyr管道中的计算中排除当前观察值

从dplyr管道中的计算中排除当前观察值
EN

Stack Overflow用户
提问于 2020-05-30 22:26:15
回答 2查看 71关注 0票数 0

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

为了简单起见,让我们计算包括当前观察值和排除该观察值的平均值。该解决方案应该适用于其他计算或函数(在我的例子中,来自DescTools包的Gini函数)。

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

代码语言:javascript
复制
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

我想添加一列表示包括这一天在内的冰的平均价格,以及一列表示不包括这一天的冰的平均价格。

代码语言:javascript
复制
da = da %>%
  group_by(ice_id) %>%
  mutate(mean_price = mean(price),
         mean_price_without = ?)

如果没有当前的观察结果,我如何添加平均价格?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-05-30 22:29:31

对于移除当前观察值并执行计算的一般情况,您可以使用map_dbl

代码语言:javascript
复制
library(dplyr)
library(purrr)
da %>%
  group_by(ice_id) %>%
  mutate(mean_price = mean(price),
         mean_price_without = map_dbl(day, ~mean(price[-.x])))
         #Or
         #mean_price_without = map_dbl(day, ~mean(price[day != .x])))
         #mean_price_without = map_dbl(row_number(), ~mean(price[-.x])))


#  ice_id   day price mean_price mean_price_without
#   <dbl> <dbl> <dbl>      <dbl>              <dbl>
#1      1     1  1.6       1.77               1.85 
#2      1     2  1.9       1.77               1.7  
#3      1     3  1.8       1.77               1.75 
#4      2     1  2.1       2.15               2.17 
#5      2     2  2.05      2.15               2.2  
#6      2     3  2.3       2.15               2.08 
#7      3     1  0.5       0.417              0.375
#8      3     2  0.4       0.417              0.425
#9      3     3  0.35      0.417              0.45 
票数 4
EN

Stack Overflow用户

发布于 2020-05-31 02:57:13

使用data.table的选项

代码语言:javascript
复制
library(data.table)
setDT(da)[, .(mean_price = mean(price),
             mean_price_without = sapply(day, function(x) mean(price[-x]))), ice_id]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62103829

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档