我有一个面板数据集,我正在尝试计算不同组的平均值。我使用以下函数:
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))对于我正在寻找的组组合,我得到了一个不同的平均值。
发布于 2019-07-29 11:17:57
它没有给你错误的值,但是我们错误地使用了这个函数。由于您尚未分享可重现的示例,因此让我们尝试使用mtcars dataset来理解。
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.4vs和am的1,1组合的平均值为28.4.
当你这样做时,这是相同的
mean(x = filter(mtcars, am == 1 & vs == 1)$mpg)
#[1] 28.37143我希望这解释了基本的问题,你可以用它来解决你的数据。
https://stackoverflow.com/questions/57246703
复制相似问题