首页 > 解决方案 > 聚合 R 数据框中的两列

问题描述

我在 R 中有一个名为 food 的数据框:

foodID   calories   fat    protein

 123       0.5      0.4     0.9
 432       0.65     0.3     0.7
 123       0.32     0.6     0.5
 983       0.82     0.2     0.6

我正在尝试通过foodID平均卡路里和蛋白质

我试过了:

cal_pro <- aggregate(food[2,4], list(food$foodID), function(df) mean(df))

但似乎我无法通过 food[2,4] 选择要应用平均函数的列?谁能帮我解决这个问题。

标签: r

解决方案


使用dplyr,您可以group_bysummarize

food %>%
    group_by(foodID) %>%
    summarize(calories_average = mean(calories),
              protein_average = mean(protein))

# A tibble: 3 x 3
  foodID calories_average protein_average
   <int>            <dbl>           <dbl>
1    123             0.41             0.7
2    432             0.65             0.7
3    983             0.82             0.6

summarize_at您可以使用选择多个变量来一次汇总,而不是指定每个变量。我们传入 2 个参数:要汇总的变量和要应用于它们的函数列表。如果列表被命名,就像这里一样,那么名称将作为后缀添加到摘要列(给出“calores_average”和“protein_average”:

food %>%
    group_by(foodID) %>%
    summarize_at(c('calories', 'protein'), list(average = mean))

summarize_at还允许您使用各种辅助函数按前缀、后缀或正则表达式选择变量(如下所示)。您可以在此处了解有关它们的更多信息:?tidyselect::select_helpers

food %>%
    group_by(foodID) %>%
    summarize_at(vars(matches('calories|protein')), list(average = mean))

推荐阅读