代码之家  ›  专栏  ›  技术社区  ›  rez

dplyr summary和group_by中出现意外结果

  •  0
  • rez  · 技术社区  · 1 年前

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

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

    sd 返回为NA。

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

    二者都 sd 意思是 正确返回。

    1 回复  |  直到 1 年前
        1
  •  1
  •   Ronak Shah    1 年前

    在第一个版本中,的值 disp 已更改为 mean(disp) 正是这个价值观 sd on。由于我们是按组进行的,并且组中只有一个数字作为平均值,因此它会返回 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
    

    现在 mean 属于 disp 对于 cyl = 4 为105.1364。此值存储在 disp 。现在你正在服用 sd 具有相同的值,即

    sd(105.1364)
    #[1] NA
    

    此get也扩展到所有其他组。

    快速解决方法是更改存储平均值的变量名。

    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 值保持不变。