2017-07-11 59 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>