web-dev-qa-db-ja.com

Rを使用してデータフレームの列のレコードの上位n%を見つける方法

約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%に入る日とその日の為替レートを確認したいとしますか?

24
Bryce Thomas

上位5%の場合:

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

上位5%についても:

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

データがV1値に基づいてソートされている場合は、sqldfに別の解決策を使用できます。

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

レートフォーム0.055%)を必要なレートに変更できます。

1
OmG

dplyrソリューションは次のようになります。

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

これは、データが並べ替えられている場合にのみ機能しますが、質問とサンプルデータはこれを暗示しています。データがソートされていない場合は、関心のある変数でarrangeする必要があります。

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

0
Zimano