一组的 N highest/lowest 个元素的平均值
Average of N highest/lowest elements of a group
我有多个给定日期的值。我想计算每一天的 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,这是第一天的正确结果。
您可以使用 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
希望对您有所帮助!
我有多个给定日期的值。我想计算每一天的 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,这是第一天的正确结果。
您可以使用 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
希望对您有所帮助!