【问题标题】:Choose top n variables in R when matching values匹配值时选择 R 中的前 n 个变量
【发布时间】:2020-05-02 11:20:53
【问题描述】:

我有一个大型时间序列数据集,并希望根据我的一列中的值从每个日期中选择前 10 个观察值。

我可以使用 group_by(Date) %>% top_n(10)

做到这一点

但是,如果第 10 次和第 11 次观察的值相等,那么它们都会被选中,所以我得到 11 个观察而不是 10 个。

有谁知道我可以做些什么来确保只选择 10 个观察值?

【问题讨论】:

    标签: r dplyr subset


    【解决方案1】:

    您可以arrange 数据并选择每组中的前 10 行。

    library(dplyr)
    df %>% arrange(Date, desc(col_name)) %>% group_by(Date) %>% slice(1:10)
    

    同样,filter

    df %>% 
     arrange(Date, desc(col_name)) %>% 
     group_by(Date) %>% 
     filter(row_number() <= 10)
    

    【讨论】:

      【解决方案2】:

      data.table 你可以做到

      library(data.table)
      setDT(df)
      df[order(Date, desc(value))][, .SD[1:10], by = Date]
      

      更改value 以匹配用于选择应保留的观察值以防出现平局的变量名称。你也可以这样做:

      df[order(Date, desc(value))][, head(.SD,10), by = Date]
      

      【讨论】:

        【解决方案3】:

        我们可以使用base R

        df1 <- df[with(df, order(Date, -value)),]
        df1[with(df1, ave(seq_along(Date), Date, FUN = function(x) x %in% 1:10)),]
        

        【讨论】:

          猜你喜欢
          • 2021-05-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-02-10
          • 1970-01-01
          • 1970-01-01
          • 2013-01-25
          相关资源
          最近更新 更多