27

我有一个数据集,显示了大约 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

4 回答 4

40

对于前 5%:

n <- 5
data[data$V2 > quantile(data$V2,prob=1-n/100),]
于 2009-10-14T02:34:53.353 回答
8

对于前 5% 的人来说:

head(data[order(data$V2,decreasing=T),],.05*nrow(data))
于 2010-01-19T20:34:11.927 回答
1

sqldf如果数据是根据值排序的,则可以使用另一种解决方案V1

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

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

于 2019-04-29T04:05:29.280 回答
1

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

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

这仅适用于对数据进行排序的情况,但您的问题和示例数据暗示了这一点。如果数据未排序,则需要arrange按您感兴趣的变量对其进行排序:

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

于 2020-03-20T14:06:03.123 回答