用分组年份总结dplyr

时间:2018-05-02 02:41:34

标签: r dplyr

我想总结一些数据。我想用几年,几个月和退款来获取一组数据。我想要的是逐年分组,并显示退款最高的月份和相应的退款金额。

一些示例数据:

Year, Month, Ref 
2017, Jan, 1234 
2017, Feb, 2345 
2017, Mar, 1123 
2018, Jan, 1133 
2018, Feb, 3453 
2018, Mar, 2343 

到目前为止我所拥有的:

RefTable <- returns_data %>% group_by(Year) %>%
  summarise(MaxRefAmt  = max(Ref))

这将获得正确的金额,但找到相应的月份证明非常困难。我在想ifelse声明需要参与,但我不确定如何做到这一点。我也正在尝试使用dplyr来执行此操作,因为我需要使用此包进行练习。

非常感谢任何帮助。如果我需要清除任何内容,请告诉我。

编辑: 我注意到这是重复的标记。我没有意识到它是。但是,在审查了类似的问题后,我很明显我不理解以前的答案。这个答案对我来说更有意义,更多的是在我正在研究的实际问题的背景下。此外,上一个问题的结果与此类似的结果不起作用,而此问题的最高结果无问题。

3 个答案:

答案 0 :(得分:2)

我们可以在“年”&#39;

分组后使用slice
returns_data %>%
   group_by(Year) %>%
   slice(which.max(Ref))
#    A tibble: 2 x 3
# Groups:   Year [2]
#   Year Month   Ref
#  <int> <chr> <dbl>
#1  2017 Feb    2345
#2  2018 Feb    3453

答案 1 :(得分:1)

我认为这是获得您所需要的最简单方法。尝试合并filter()summarise()。在这里使用library(tidyverse) RefTable <- group_by(returns_data, Year) %>% filter(Ref == max(Ref)) # Output: # A tibble: 2 x 3 Year Month Ref <int> <fct> <int> 1 2017 Feb 2345 2 2018 Feb 3453 实际上是不必要的,因为您从每个组中的 返回一行,而不是将它们汇总到一行中。试试这个:

onInterceptTouchEvent

答案 2 :(得分:0)

RefTable <- returns_data %>%
    group_by(Year) %>% 
    summarise(MaxRefAmt = max(Ref),Month=Month[which.max(Ref)])

A tibble: 2 x 3
   Year MaxRefAmt Month 
  <int>     <dbl> <fct> 
1  2017     2345. " Feb"
2  2018     3453. " Feb"

使用基数R:

unsplit(with(dat,by(dat,Year,function(x)x[which.max(x$Ref),])),1:2)
  Year Month  Ref
2 2017   Feb 2345
5 2018   Feb 3453