在计算其他汇总统计信息的同时使用 n()

Posted

技术标签:

【中文标题】在计算其他汇总统计信息的同时使用 n()【英文标题】:Using n() at the same time as calculating other summary statistics 【发布时间】:2017-12-14 21:40:14 【问题描述】:

我无法根据以下数据集使用dplyr 准备汇总表:

set.seed(1)
df <- data.frame(rep(sample(c(2012,2016),10, replace = T)),
                 sample(c('Treat','Control'),10,replace = T),
                 runif(10,0,1),
                 runif(10,0,1),
                 runif(10,0,1))

 colnames(df) <- c('Year','Group','V1','V2','V3')

我想通过YearGroup 的每个组合计算平均值、中位数、标准差并计算观察次数。

我已成功使用此代码获取meanmediansd

summary.table = df %>% 
    group_by(Year, Group) %>%
    summarise_all(funs(n(), sd, median, mean))

但是,我不知道如何在funs() 命令中引入n() 函数。它给了我V1V2V3 的计数。这是非常多余的,因为我只想要样本的大小。我试过介绍

    mutate(N = n()) %>%

group_by() 行之前和之后,但它并没有给我想要的。

有什么帮助吗?


编辑:我的疑问还不够清楚。问题是代码给了我不需要的列,因为V1 的观察次数对我来说已经足够了。

【问题讨论】:

您能否在n 之后添加() 以使代码可用?像这样:summarise_all(funs(n(),sd,median,mean)) 检查***.com/questions/22801153/… 看看是否有帮助 @raymkchow 我已经编辑了这个问题。现在很清楚了。 由于您正在计算 group_by 中每个组的数量,因此您不必关心观察的数量是 V1、V2 还是 V3。我会这样做:... %&gt;% summarise_all(funs(sd,median,mean)) %&gt;% mutate(n = n()) 它不起作用,n总是n = 2,这是不正确的 【参考方案1】:

在汇总之前添加N 列作为额外的分组列:

library(dplyr)
set.seed(1)

df <- data.frame(Year = rep(sample(c(2012, 2016), 10, replace = TRUE)),
                 Group = sample(c('Treat', 'Control'), 10, replace = TRUE),
                 V1 = runif(10, 0, 1),
                 V2 = runif(10, 0, 1),
                 V3 = runif(10, 0, 1))


df2 <- df %>% 
    group_by(Year, Group) %>% 
    group_by(N = n(), add = TRUE) %>% 
    summarise_all(funs(sd, median, mean))

df2
#> # A tibble: 4 x 12
#> # Groups:   Year, Group [?]
#>    Year   Group     N      V1_sd      V2_sd     V3_sd V1_median V2_median
#>   <dbl>  <fctr> <int>      <dbl>      <dbl>     <dbl>     <dbl>     <dbl>
#> 1  2012 Control     2 0.05170954 0.29422635 0.1152669 0.3037848 0.6193239
#> 2  2012   Treat     2 0.51092899 0.08307494 0.1229560 0.5734239 0.5408230
#> 3  2016 Control     3 0.32043716 0.34402222 0.3822026 0.3823880 0.4935413
#> 4  2016   Treat     3 0.37759667 0.29566739 0.1233162 0.3861141 0.6684667
#> # ... with 4 more variables: V3_median <dbl>, V1_mean <dbl>,
#> #   V2_mean <dbl>, V3_mean <dbl>

【讨论】:

【参考方案2】:

您是否遇到与我相同的错误:

“n() 中的错误:不应直接调用函数”

如果是这样,这里有一个堆栈问题可能会有所帮助: dplyr: "Error in n(): function should not be called directly"

解决方案似乎是在似乎存在冲突的地方分离 plyr 并重新加载 dplyr 库。

【讨论】:

以上是关于在计算其他汇总统计信息的同时使用 n()的主要内容,如果未能解决你的问题,请参考以下文章

如何根据使用 dplyr 的组上的聚合函数计算新列(在汇总统计信息上添加汇总统计信息)?

为什么从glmnet模型中获取回归系数的统计汇总信息是不可取的?

超全的 100 个 Pandas 函数汇总,建议收藏

超全的 100 个 Pandas 函数汇总,建议收藏

Matplotlib 箱线图使用预先计算(汇总)统计

R Data.table 用于计算跨多列的汇总统计信息