如何使用 dplyr 基于变量级别求和?

How to sum based on variable level using dplyr?

我有一个包含一些运动表现数据的数据集。下面是一个小例子。

Player.Name Period.Name Average.Distance Total.HIR V6.Distance   Date
Player 1    Quarter 1           2240.744    588.31       84.42   2/3/18
Player 2    Quarter 1           3008.554    833.94       10.50   2/3/18
Player 3    Quarter 1           2907.660    1020.78      58.52   2/3/18
Player 1    Quarter 2           2747.222    903.37       82.41   2/3/18
Player 2    Quarter 2           2225.836    679.79       31.32   2/3/18
Player 3    Quarter 2           3445.327    1034.16      108.20  2/3/18

我正在尝试使用 dplyr 对 Average.DistanceTotal.HIRV6.Distance 中的每个 Quarter 1Quarter 2 求和。我想按 Player.NameDate 对其进行分组,注意我的数据集中有很多日期 (matchdb2018)。这是我到目前为止的代码:

library(dplyr)
summary <- matchdb2018 %>%
  group_by(Player.Name, Date) %>%

我不确定如何继续下一行代码以及如何根据变量的水平求和。

任何帮助将不胜感激。

所以我认为在您的情况下,dplyr 中的 summarise() 将是您的最佳选择。您可以执行以下操作。

library(dplyr)
summary <- matchdb2018 %>%
group_by(Player.Name, Date) %>%
summarise(col1=sum(Average.Distance),col2=sum(Total.HIR),col3=sum(V6.Distance))

此代码可让您查看 Average.Distance、Total.HIR 和 V6.Distance 的总和 player-name 以及日期。

这将为您完成工作,您可能希望保留为数据框而不是 tibble 对象。

library(dplyr)
summary <- matchdb2018 %>%
  group_by(Player.Name, Date) %>%
  summarise(tot_dist=sum(Average.Distance),tot_hir=sum(Total.HIR),tot_v6=sum(V6.Distance))%>%
  as.data.frame()

您可以使用summarise_at

df %>% 
  group_by(Date, Player.Name) %>% 
  summarize_at(c("Average.Distance", "Total.HIR", "V6.Distance"), sum)

或者您可以先取消选择 Period.Name(因为它不是数字)并使用 summarize_all ... 节省一些输入。

df %>% 
  group_by(Date, Player.Name) %>% 
  select(-Period.Name) %>%
  summarize_all(sum)