【问题标题】:Average of N highest/lowest elements of a group [duplicate]一组中N个最高/最低元素的平均值[重复]
【发布时间】:2018-01-09 07:58:14
【问题描述】:

对于给定的日期,我有多个值。我想计算每一天的 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,这是第一天的正确结果。

【问题讨论】:

    标签: r tidyverse


    【解决方案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
    

    希望这会有所帮助!

    【讨论】:

    • 非常感谢。完美运行
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-08
    相关资源
    最近更新 更多