dplyr summarize和group_by中出现意外结果

tkclm6bt  于 2023-04-03  发布在  其他
关注(0)|答案(1)|浏览(156)

我想知道为什么只改变汇总统计的顺序(meansd)会导致不同的输出。这一点在dplyr R包的summarize文档中也提到过。

mtcars %>%
  group_by(cyl) %>%
  summarise(disp = mean(disp), sd = sd(disp))

sd返回为NA。

mtcars %>%
  group_by(cyl) %>%
  summarise(sd = sd(disp), disp = mean(disp))

sdmean都正确返回。

ztyzrc3y

ztyzrc3y1#

在第一个版本中,disp的值随着mean(disp)而变化,我们采用的就是这个值sd。由于我们是按组进行的,并且组中只有一个数字作为平均值,因此它返回NA作为标准差。
让我们来分析一下第一个例子--

library(dplyr)

mtcars %>%
    group_by(cyl) %>%
    summarise(disp = mean(disp), sd = sd(disp))

#    cyl  disp    sd
#  <dbl> <dbl> <dbl>
#1     4  105.    NA
#2     6  183.    NA
#3     8  353.    NA

现在,cyl = 4dispmean是105.1364。该值存储在disp中。现在,您将获取相同值的sd,即

sd(105.1364)
#[1] NA

这也扩展到了所有其他群体。
一个快速解决方法是更改存储平均值的变量名。

mtcars %>%
  group_by(cyl) %>%
  summarise(disp_mean = mean(disp), sd = sd(disp))

#    cyl disp_mean    sd
#  <dbl>     <dbl> <dbl>
#1     4      105.  26.9
#2     6      183.  41.6
#3     8      353.  67.8

第二种情况不会遇到这个问题,因为sd值保存在变量sd中,disp值保持不变。

相关问题