r - 聚合 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] 选择要应用平均函数的列?谁能帮我解决这个问题。
解决方案
使用dplyr
,您可以group_by
和summarize
:
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))
推荐阅读
- octave - 如何在 Octave (Ubuntu 18.04) 上安装 FEATool?
- javascript - Angular Ngfor ,触发点击 nth(x) 项目
- python-3.x - 如何在 whileloop 中让随机生成的数字每次都不同?
- javascript - 使用 MySQL 数据库数据从 for 循环创建数组
- python - 为什么只使用工人?
- c++ - ncurses (init_extended_pair):不能创建超过 255 个颜色对
- ruby - 将数组整数转换为 RGB 值的算法(类似于 excel)
- excel - 删除和添加工作表会弄乱代码
- mongodb - Mongodb 聚合与 mongoose 过滤器嵌入文档
- javascript - 如何将正则表达式转换为动态?