我有一个数据集显示澳大利亚元兑美元汇率在大约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%的日子和汇率?
答案 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.05
(5%
)更改为任何所需的汇率。
答案 3 :(得分:0)
dplyr
解决方案可能如下所示:
obs <- nrow(data)
data %>% filter(row_number() < obs * 0.05)
这仅在数据已排序时才有效,但是您的问题和示例数据暗示了这一点。如果数据未排序,则需要按您感兴趣的变量arrange
对其进行排序:
data <- data %>% arrange(desc(V2))