2017-08-02 81 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

非常感謝。完美的作品 –

相關問題