使用过滤器计算平均值会给出错误的值

Using filter to calculate mean gives wrong value

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

mean(x = filter(panel, dv_id== 1 )$price, y = filter(panel, dvv_id== 1)$price)

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

panel %>%
    group_by(dv_id, dvv_id) %>%
    dplyr::summarize(Mean = mean(price, na.rm=TRUE))

我确实得到了我正在寻找的组组合的不同平均值。

它没有给你错误的值,但我们错误地使用了这个函数。由于您还没有共享可重现的示例,让我们尝试使用 mtcars 数据集来理解。

library(dplyr)
#Same as your attempt 
mean(x = filter(mtcars, am == 1 )$mpg, y = filter(mtcars, vs == 1)$mpg) #gives
#[1] 24.39231

现在让我们selectvs == 0

mean(x = filter(mtcars, am == 1 )$mpg, y = filter(mtcars, vs == 0)$mpg)
#[1] 24.39231

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

mean(x = filter(mtcars, am == 1 )$mpg, y = 100000)
#[1] 24.39231

答案仍然相同,这意味着无论您对值 y 的值是多少,答案仍然相同,因为在计算时仅考虑 x 值。

mean(x = filter(mtcars, am == 1 )$mpg)
#[1] 24.39231

您可能想做的是(记下 c

mean(c(x = filter(mtcars, am == 1 )$mpg, y = filter(mtcars, vs == 1)$mpg))
#[1] 24.47778

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

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

这和你做的一样

mean(x = filter(mtcars, am == 1 & vs == 1)$mpg)
#[1] 28.37143

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