R - 使用dplyr对分组数据进行汇总(总和)汇总

时间:2017-01-16 09:44:36

标签: r dplyr aggregate

我有一个大型数据集,其中包含医院,医院组的名称,以及按月分列的患者数量。我正在尝试使用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_by医院组,但我不知道如何获得每个月和每年的累计总和(有大量的日期列,所以我希望那里这是一种快速简便的方法)。

很抱歉发布这样一个基本问题 - 非常感谢任何帮助或建议。

Greg

2 个答案:

答案 0 :(得分:3)

使用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))而不是{ {1}}。

答案 1 :(得分:0)

我们可以使用base R

执行此操作

我们按split Hospital_group数据框,然后按列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

rake db:migrate VERSION=0