【问题标题】:How to find top n% of records in a column of a dataframe using R如何使用 R 在数据框的列中查找前 n% 的记录
【发布时间】:2010-12-06 13:03:29
【问题描述】:

我有一个数据集,显示了大约 20 年期间每天一次澳元兑美元的汇率。我在数据框中有数据,第一列是日期,第二列是汇率。以下是数据示例:

>data
             V1     V2
1    12/12/1983 0.9175
2    13/12/1983 0.9010
3    14/12/1983 0.9000
4    15/12/1983 0.8978
5    16/12/1983 0.8928
6    19/12/1983 0.8770
7    20/12/1983 0.8795
8    21/12/1983 0.8905
9    22/12/1983 0.9005
10   23/12/1983 0.9005

我将如何显示这些记录的前 n%?例如。假设我想查看汇率在数据集中所有汇率中排名前 5% 的那些日子和汇率?

【问题讨论】:

    标签: r dataframe


    【解决方案1】:

    前 5%:

    n <- 5
    data[data$V2 > quantile(data$V2,prob=1-n/100),]
    

    【讨论】:

    • 或者省点打字:subset(data, V2 &gt; quantile(V2, prob = 1 - n/100))
    • 或使用data.table:setDT(data)[V2 &gt; quantile(V2, probs = 1 - n/100)]
    【解决方案2】:

    还有前 5%:

    head(data[order(data$V2,decreasing=T),],.05*nrow(data))
    

    【讨论】:

      【解决方案3】:

      如果数据基于V1 值排序,则可以为sqldf 使用另一种解决方案:

      library(sqldf)
      sqldf('SELECT * FROM df
             ORDER BY V1
             LIMIT (SELECT 0.05 * COUNT(*) FROM df)
            ') 
      

      您可以将费率表0.05 (5%) 更改为任何所需的费率。

      【讨论】:

        【解决方案4】:

        dplyr 解决方案可能如下所示:

        obs <- nrow(data) 
        data %>% filter(row_number() < obs * 0.05)
        

        这仅在数据已排序时才有效,但您的问题和示例数据暗示了这一点。如果数据未排序,您需要通过您感兴趣的变量arrange它:

        data &lt;- data %&gt;% arrange(desc(V2))

        【讨论】:

          猜你喜欢
          • 2019-07-10
          • 2016-03-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-03-28
          • 2021-11-29
          相关资源
          最近更新 更多