根据R中的其他列值对行求和

时间:2020-05-05 09:08:30

标签: r sum tidyverse

我想总结一下费用。但是,我的数据有点复杂(第一次使用R用户)。我有6年(2013-2018)的数据,每个ID都有GP费用。这意味着每个个人每年都有多行。我想总结一下每个人每年的费用。但是,成本可以来自不同的类别,如果是的话,我只希望对来自相同类别的成本进行汇总。例如:如果我希望将2013年ID 1的所有其他费用都加在一起,则将它们放在一起。然后在2013年为mental 1新增一个ID为1的行(见下文)。

Classes ‘tbl_df’, ‘tbl’ and 'data.frame':   3785547 obs. of  4 variables:
 $ ID: 1, 1, 1, 2, 2..
  ..- attr(*, "format.spss")= chr "F9.3"
 $ Category: 'haven_labelled' chr  "Other” “Mental” "Other” "Other”  ...
  ..- attr(*, "format.spss")= chr "A66"
  ..- attr(*, "display_width")= int 50
  ..- attr(*, "labels")= Named chr  "Long" "Short" "Middle" "After" ...
  .. ..- attr(*, "names")= chr  "Long" "Short" "Middle" "After" ...
 $ Year        : num  2013 2013 2014 2014 2015 ...
  ..- attr(*, "format.spss")= chr "F9.3"
 $ Costs           : num  124 76.6 44.3 33.7 24.7 ...
  ..- attr(*, "format.spss")= chr "F9.3"

概述: -ID:1、1、1、1、1、1、1、1、2、2…。 -年:2013、2013、2014、2015、2015、2015、2017、2013、2014。 -类别:其他,心理,其他, 其他,其他,精神,特殊,其他...
-费用:20、21、30、50、40、44 20、50、35…

我想要的是:每个人每年(针对每种费用类别)都有一行,其中包含该特定年份和费用类别的汇总费用。

我尝试过:sum_col_if(criterion,...,data = NULL),但无法正常工作。

非常感谢您!

1 个答案:

答案 0 :(得分:1)

欢迎学生! tidyverse旨在使其变得非常简单...假设您的数据帧称为df,您可以执行以下操作:

df %>% group_by(ID, Category, Year) %>% summarize(total = sum(Costs))

通过这种方式,您可以创建ID /类别/年份的组,并对它们进行汇总。试试看!