我想总结一些数据。我想用几年,几个月和退款来获取一组数据。我想要的是逐年分组,并显示退款最高的月份和相应的退款金额。
一些示例数据:
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
来执行此操作,因为我需要使用此包进行练习。
非常感谢任何帮助。如果我需要清除任何内容,请告诉我。
编辑: 我注意到这是重复的标记。我没有意识到它是。但是,在审查了类似的问题后,我很明显我不理解以前的答案。这个答案对我来说更有意义,更多的是在我正在研究的实际问题的背景下。此外,上一个问题的结果与此类似的结果不起作用,而此问题的最高结果无问题。
答案 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