我有一个数据集:
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%的市场价值。此外,它们必须按回报的数量级排列。也就是说,第一个五分位数应包含具有最低回报值的20%证券,第五个五分位数应包含具有最高回报值的20%证券。我想创建“Quintile”栏目,在不同的五分位数中,可以有不同数量的证券,但总市场价值应该相同。 我尝试了几种方法,我对R很新,所以请给我一些帮助。非常感谢你提前!
塞缪尔
答案 0 :(得分:1)
您可以订购数据然后使用findInterval(添加一个小的delta来使用封闭的右侧括号):
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
答案 1 :(得分:1)
以下内容适用于您的数据。
首先,按增加return
排序:
dat <- dat[order(dat$return), ]
然后,计算累积的market
份额并减少0.2:
dat$Quintile <- ceiling(cumsum(dat$market) / 0.2)
最后,按Security
排序:
dat <- dat[order(dat$Security), ]