首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用滤波器计算平均值给出了错误的值

使用滤波器计算平均值给出了错误的值
EN

Stack Overflow用户
提问于 2019-07-29 10:55:55
回答 1查看 250关注 0票数 0

我有一个面板数据集,我正在尝试计算不同组的平均值。我使用以下函数:

代码语言:javascript
运行
复制
mean(x = filter(panel, dv_id== 1 )$price, y = filter(panel, dvv_id== 1)$price)

但是,当我使用这个函数时:

代码语言:javascript
运行
复制
panel %>%
    group_by(dv_id, dvv_id) %>%
    dplyr::summarize(Mean = mean(price, na.rm=TRUE))

对于我正在寻找的组组合,我得到了一个不同的平均值。

EN

Stack Overflow用户

回答已采纳

发布于 2019-07-29 11:17:57

它没有给你错误的值,但是我们错误地使用了这个函数。由于您尚未分享可重现的示例,因此让我们尝试使用mtcars dataset来理解。

代码语言:javascript
运行
复制
library(dplyr)
#Same as your attempt 
mean(x = filter(mtcars, am == 1 )$mpg, y = filter(mtcars, vs == 1)$mpg) #gives
#[1] 24.39231

现在让我们选择vs == 0

代码语言:javascript
运行
复制
mean(x = filter(mtcars, am == 1 )$mpg, y = filter(mtcars, vs == 0)$mpg)
#[1] 24.39231

答案仍然是一样的,这很奇怪。现在让我们添加一个非常大的数字

代码语言:javascript
运行
复制
mean(x = filter(mtcars, am == 1 )$mpg, y = 100000)
#[1] 24.39231

答案仍然是相同的,这意味着无论您的值y是什么值,答案都是相同的,因为在计算它时只考虑x值。

代码语言:javascript
运行
复制
mean(x = filter(mtcars, am == 1 )$mpg)
#[1] 24.39231

您可能想要做的是(注意c)

代码语言:javascript
运行
复制
mean(c(x = filter(mtcars, am == 1 )$mpg, y = filter(mtcars, vs == 1)$mpg))
#[1] 24.47778

但是你确定你想要这样做吗,因为它会分别过滤amvs,所以可能会有一些重叠。使用group_by时,计算中没有重叠。

代码语言:javascript
运行
复制
mtcars %>%
  group_by(vs, am) %>%
  dplyr::summarise(Mean = mean(mpg))

#    vs    am  Mean
#  <dbl> <dbl> <dbl>
#1     0     0  15.0
#2     0     1  19.8
#3     1     0  20.7
#4     1     1  28.4

vsam的1,1组合的平均值为28.4.

当你这样做时,这是相同的

代码语言:javascript
运行
复制
mean(x = filter(mtcars, am == 1 & vs == 1)$mpg)
#[1] 28.37143

我希望这解释了基本的问题,你可以用它来解决你的数据。

票数 4
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57246703

复制
相关文章

相似问题

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