2017-07-11 62 views
2

我无法准备使用dplyr根据下面的数据集的汇总表使用N():同时作为计算其他汇总统计

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()功能。它给了我的计数为V1,V2V3。这是相当多余的,因为我只想要样本的大小。我曾尝试之前和group_by()行后引入

mutate(N = n()) %>% 

,但它并没有给我我想要的东西。

任何帮助?


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

+1

你可以添加''''()'''''''n''''使代码可行?像这样:''''summarise_all(funs(n(),sd,median,mean))''' – raymkchow

+0

检查https://stackoverflow.com/questions/22801153/dplyr-error-in-n-function-不应该被称为 - 直接看看是否有帮助 – Kevin

+0

@raymkchow我编辑了这个问题。现在很清楚。 –

回答

2

您是否获得了同样的错误我:

“在n错误()函数不应该被直接称为”

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

分辨率似乎分离plyr那里似乎是一个冲突和重装dplyr库。

+0

这不提供问题的答案。一旦你有足够的[声誉](https://stackoverflow.com/help/whats-reputation),你将能够[评论任何帖子](https:// stackoverflow。COM /帮助/权限/评论);相反,[提供不需要提问者澄清的答案](https://meta.stackexchange.com/questions/214173/why-do-i-need-50-reputation-to-comment-what-c​​an- I-DO-代替)。 - [来自评论](/ review/low-quality-posts/16682172) – Masoud

5

总结作为一个额外的分组列前添加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>