如何使用R在数据框的列中查找前n%的记录

时间:2009-10-14 02:28:41

标签: r dataframe

我有一个数据集显示澳大利亚元兑美元汇率在大约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%的日子和汇率?

4 个答案:

答案 0 :(得分:33)

前5%:

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

答案 1 :(得分:6)

前5%也是:

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

答案 2 :(得分:1)

如果根据sqldf值对数据进行排序,则V1可以使用另一种解决方案:

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

您可以将汇率表0.055%)更改为任何所需的汇率。

答案 3 :(得分:0)

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

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

这仅在数据已排序时才有效,但是您的问题和示例数据暗示了这一点。如果数据未排序,则需要按您感兴趣的变量arrange对其进行排序:

data <- data %>% arrange(desc(V2))