我希望返回R中数据框中每个组的最大值的对应值。搜索我只能找到python和excel的解决方案。
我似乎得到了正确的答案,但是格式很奇怪:
示例:
set.seed(423)
df = data.frame(week = c(rep(1,7),rep(2,rep(3,7)),day = c(1:7,1:7,1:7),value = runif(21))
df
week day value
1 1 1 0.89368600
2 1 2 0.63863225
3 1 3 0.19254541
4 1 4 0.57557113
5 1 5 0.78458928
6 1 6 0.55080956
7 1 7 0.59388856
8 2 1 0.02040073
9 2 2 0.17663162
10 2 3 0.33647923
11 2 4 0.53304330
12 2 5 0.22939499
13 2 6 0.43232959
14 2 7 0.71889969
15 3 1 0.97318020
16 3 2 0.20320008
17 3 3 0.58991593
18 3 4 0.88450876
19 3 5 0.61154896
20 3 6 0.68123761
21 3 7 0.48162899
library('dplyr')
group_by(df,week) %>%
summarize(max.day = .[which(value == max(value,na.rm = T)),'day'])
week max.day$ NA NA
<dbl> <int> <int> <int>
1 1 1 7 1
2 2 NA NA NA
3 3 NA NA NA
最大天数(1、7、1)的值显示正确,可以看出,如果将此代码中的值与原始df相匹配:
group_by(df,week) %>%
summarise(value = max(value))
week value
<dbl> <dbl>
1 1 0.894
2 2 0.719
3 3 0.973
但是我想要的(以及我从代码中得到的期望)是一个如下表:
week max.day
1 1 1
2 2 7
3 3 1
我在这里做什么错了?
此外,如果我有一个大型数据集,其中某些组的最大值可能重复,那么此代码将起作用。本质上,我的.[which(value == max(value,'day']
是按组应用的,还是仅查看整个矢量?