2017-08-02 10 views
1

指定された日付に複数の値があります。与えられた日ごとにn個の最高値の平均を計算したい。グループのN個の最高/最低要素の平均

1日目の値が(1,2,3)、2日目(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 

出力は、1日目の正しい結果である両方の日の値が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

ありがとうございます。完璧な作品 –

関連する問題