组中N个最高/最低元素的平均值

时间:2017-08-02 08:03:17

标签: r tidyverse

给定日期我有多个值。我想计算每个给定日期的n个最高值的平均值。

如果第一天的值是(1,2,3)和第二天(4,5,6),我希望第1天看到2.5,第2天看到5.5。 下面是一些示例数据来说明问题和我的想法到目前为止。

library(tidyverse)
#Setting up Dummy Data
Dummy_date<-c("2017-01-01","2017-01-01","2017-01-01","2017-01-02","2017-01-02","2017-01-02")
Dummy_data<-seq(1:6)
Dummy_df<-as.data.frame(cbind(Dummy_date,Dummy_data))
names(Dummy_df[1])<-"Date"
names(Dummy_df[2])<-"Data"

#Format Dummy Dataframe
Dummy_df$Dummy_date<-as.POSIXct(Dummy_date)
Dummy_df$Dummy_data<-as.numeric(Dummy_data)

#Defining  N
 N=2

#My initial approach. which only works for the 1st day...
Best_N<-Dummy_df%>%
  group_by(Dummy_date)%>%
  summarise(Max2=sum(order(-Dummy_data)[1:N])/N)

Best_N 

两天的输出结果为2.5,这是第一天的正确结果。

1 个答案:

答案 0 :(得分:1)

您可以使用top_n函数:

Best_Two<-Dummy_df%>%
  group_by(Dummy_date)%>%
  top_n(Dummy_data,n=2) %>%
  summarize(mean = mean(Dummy_data))

输出:

# A tibble: 2 x 2
  Dummy_date  mean
      <dttm> <dbl>
1 2017-01-01   2.5
2 2017-01-02   5.5

希望这有帮助!