約20年間、1日1回のオーストラリアドルと米ドルの為替レートを示すデータセットがあります。データフレームにデータがあり、最初の列が日付、2番目の列が為替レートです。データのサンプルは次のとおりです。
>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%に入る日とその日の為替レートを確認したいとしますか?
上位5%の場合:
n <- 5
data[data$V2 > quantile(data$V2,prob=1-n/100),]
上位5%についても:
head(data[order(data$V2,decreasing=T),],.05*nrow(data))
データがV1
値に基づいてソートされている場合は、sqldf
に別の解決策を使用できます。
library(sqldf)
sqldf('SELECT * FROM df
ORDER BY V1
LIMIT (SELECT 0.05 * COUNT(*) FROM df)
')
レートフォーム0.05
(5%
)を必要なレートに変更できます。
dplyr
ソリューションは次のようになります。
_obs <- nrow(data)
data %>% filter(row_number() < obs * 0.05)
_
これは、データが並べ替えられている場合にのみ機能しますが、質問とサンプルデータはこれを暗示しています。データがソートされていない場合は、関心のある変数でarrange
する必要があります。
data <- data %>% arrange(desc(V2))