2

私はデータセットを持っています:

Security      %market value      return    Quintile*
1             0.07               100        3
2             0.10               88         2
3             0.08               78         1
4             0.12               59         1
5             0.20               106        4
6             0.04               94         3
7             0.05               111        5
8             0.10               83         2
9             0.06               97         3
10            0.03               90         3
11            0.15               119        5

実際のデータ セットには 5,000 行を超える行があり、R を使用して 5 つの五分位を作成したいと考えています。各五分位は市場価値の 20% であると想定されています。さらに、利益の大きさの順にランク付けする必要があります。つまり、第 1 五分位には最低のリターン値を持つ 20% の証券が含まれ、第 5 分位には最高のリターン値を持つ 20% の証券が含まれます。列「五分位」を作成したいと思います。異なる五分位の中には、異なる数の有価証券が存在する可能性がありますが、合計 %market 値は同じである必要があります。私はいくつかの方法を試しましたが、R は初めてなので、親切に助けてください。事前にどうもありがとうございました!

サミュエル

4

2 に答える 2

1

以下はあなたのデータで動作します。

まず、昇順で並べ替えますreturn

dat <- dat[order(dat$return), ]

次に、累積marketシェアを計算し、0.2 ごとにカットします。

dat$Quintile <- ceiling(cumsum(dat$market) / 0.2)

最後に、次の順に並べ替えますSecurity

dat <- dat[order(dat$Security), ]
于 2013-05-24T00:29:43.400 に答える
1

データを並べ替えてから、findInterval を使用できます (閉じた右中括弧を使用するために小さなデルタを追加します)。

raw_data <- raw_data[order(raw_data$return),]
raw_data$Q2 <- findInterval( cumsum(raw_data$marketvalue) , seq(0,1,length=5)+0.000001 , right = T )
raw_data
#   Security marketvalue return Quintile Q2
#4         4        0.12     59        1  1
#3         3        0.08     78        1  1
#8         8        0.10     83        2  2
#2         2        0.10     88        2  2
#10       10        0.03     90        3  3
#6         6        0.04     94        3  3
#9         9        0.06     97        3  3
#1         1        0.07    100        3  3
#5         5        0.20    106        4  4
#7         7        0.05    111        5  5
#11       11        0.15    119        5  5
于 2013-05-23T21:48:49.283 に答える