2017-01-16 45 views
-2

我有一個包含醫院,醫院組的名稱大型數據集,然後按月份呈現患者人數分組數據的彙總。我正在嘗試使用dplyr創建一個摘要,其中包含每個月呈現的患者總數,由醫院組彙總。數據幀是這樣的:的R - 骨料(總和)使用dplyr

Hospital | Hospital_group | Jan 03 | Feb 03 | Mar 03 | Apr 03 | ..... 
--------------------------------------------------------------- 
Hosp 1 | Group A  | 5 | 5 | 6 | 4 | ..... 
--------------------------------------------------------------- 
Hosp 2 | Group A  | 6 | 3 | 8 | 2 | ..... 
--------------------------------------------------------------- 
Hosp 3 | Group B  | 5 | 5 | 6 | 4 | ..... 
--------------------------------------------------------------- 
Hosp 4 | Group B  | 3 | 7 | 2 | 1 | ..... 
--------------------------------------------------------------- 

我試圖創建一個新的數據幀,看起來像這樣:

Hospital_group |Jan 03 | Feb 03 | Mar 03 | Apr 03 | ..... 
---------------------------------------------------------- 
Group A  | 11 | 8 | 14 | 6 | ..... 
---------------------------------------------------------- 
Group B  | 8 | 12 |  8 | 5 | ..... 
---------------------------------------------------------- 

我試圖用dplyr彙總數據,但我一點卡住了(你可能已經猜到了,對此很新鮮)。我設法篩選出醫院組的第一列(醫院名稱)和group_,但不知道如何獲得每個月和每年的累積總和(有大量的日期列,所以我希望在那裏這是一種快速而簡單的方法)。

抱歉張貼這樣一個基本問題 - 任何幫助或建議將不勝感激。

格雷格

+0

你能不能分享一下你試過的,以及你如何試圖從'dplyr'使用'sumamrise()'? –

+2

'summarise_all'或數據重塑長形式 – alistaire

回答

1

使用summarize_all: 例子:

df <- tibble(name=c("a","b", "a","b"), colA = c(1,2,3,4), colB=c(5,6,7,8)) 
df 

# A tibble: 4 × 3 
    name colA colB 
    <chr> <dbl> <dbl> 
1  a  1  5 
2  b  2  6 
3  a  3  7 
4  b  4  8 

df %>% group_by(name) %>% summarize_all(sum) 

結果:

# A tibble: 2 × 3 
    name colA colB 
    <chr> <dbl> <dbl> 
1  a  4 12 
2  b  6 14 

編輯:在您的情況,您的數據幀包含您不想聚集一列(醫院名稱)。您可能必須先取消選擇醫院名稱列,或使用summarize_at(vars(-Hospital), funs(sum))而不是summarize_all

+1

'summarise_each'是[即將]棄用,取而代之的'summarise_all','summarise_at'和'summarise_if'的。 – alistaire

+0

@alistaire,謝謝,我會更新答案。 – hdkrgr

0

我們可以通過base R

我們通過Hospital_groupsplit數據框,然後sum它列明智做到這一點。

do.call(rbind, lapply(split(df[-c(1, 2)], df$Hospital_group), colSums)) 


#   Jan_03 Feb_03 Mar_03 Apr_03 
#Group_A  11  8  14  6 
#Group_B  8  12  8  5