它并没有给你错误的值,但是我们错误地使用了这个函数。由于您没有分享可重现的示例,让我们尝试使用mtcars 数据集来理解。
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
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
但你确定你想要这个,因为这会分别过滤 am 和 vs,所以可能会有一些重叠。当您使用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
vs 和 am 的 1、1 个组合的平均值为 28.4
当你这样做时是一样的
mean(x = filter(mtcars, am == 1 & vs == 1)$mpg)
#[1] 28.37143
我希望这可以解释基本问题,并且您可以使用它来解决您的数据问题。