2017-08-02 84 views
1

对于给定日期,我有多个值。我想计算每个给定日期n个最高值的平均值。组中N个最高/最低元素的平均数

如果第一天的数值为(1,2,3),第二天的数值为(4,5,6),我希望第一天的数据为2.5,第二天的数据为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

您可以使用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 

希望这有助于!

+0

非常感谢。完美的作品 –

相关问题