summarize_all 具有 "n()" 功能

summarize_all with "n()" function

我正在使用 summarize_all() 函数在 dplyr 中总结一个数据框。如果我执行以下操作:

summarize_all(mydf, list(mean="mean", median="median", sd="sd"))

对于我的每个原始度量,我得到一个包含 3 个变量的小标题,所有变量都以类型(均值、中位数、标准差)作为后缀。伟大的!但是当我尝试捕获 within-vector n 来自己计算标准偏差并确保不计算丢失的单元格时...

summarize_all(mydf, list(mean="mean", median="median", sd="sd", n="n"))

...我得到一个错误:

Error in (function ()  : unused argument (var_a)

这不是我的 var_a 向量的问题。如果删除它,var_b 等也会出现相同的错误。每当我请求 nn() 时,summarize_all 函数都会产生奇怪的结果,或者如果我使用 .funs() 并列出我想要计算的描述。

怎么回事?

这里,如果我们想要更好的控制,可以使用~,即添加其他参数

library(dplyr)
mtcars %>% 
      summarise_all(list(mean = ~ mean(.), median = ~median(.), n = ~ n()))

但是,为每一列获取 n() 没有多大意义,因为它们是一样的。而是在执行 summarise

之前创建 n()
mtcars %>%
   group_by(n = n()) %>%
   summarise_all(list(mean = mean, median = median))

否则,只传递未引用的函数

mtcars %>%
     summarise_all(list(mean = mean, median = median))

它给您带来问题的原因是因为 n() 不接受任何参数,这与 mean()median() 不同。使用 length() 来获得想要的效果:

summarize_all(mydf, list(mean="mean", median="median", sd="sd", n="length"))