R 根据另一列的排名计算一列的总和
我有一个数据集:R 根据另一列的排名计算一列的总和,r,R,我有一个数据集: 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
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
实际数据集有5000多行,我想用R来创建5个五分位数,每个五分位数假设有20%的市场价值。此外,它们还必须按回报的大小顺序排列。也就是说,第一个五分位数应包含回报值最低的20%证券,第五个五分位数应包含回报值最高的20%证券。我想创建“五分位数”列,在不同的五分位数中可以有不同数量的证券,但总市值百分比应相同。
我尝试过几种方法,我对R很陌生,所以请提供一些帮助。提前非常感谢
Samuel您可以对数据进行排序,然后使用findInterval(添加一个小三角形以使用右大括号):
raw_data以下内容适用于您的数据
首先,通过增加返回值进行排序:
dat <- dat[order(dat$return), ]
最后,按安全性将内容排序:
dat <- dat[order(dat$Security), ]
dat So.@SimonO101非常感谢你帮我更改格式。这是我第一次发布一个问题,而且是一个新问题。@SimonO101我尝试使用循环:for(c in 1:nrow(原始数据)){mv_sum好的,太好了!把它贴到问题中,这样人们就可以看到你有一种尝试过的方法。一般来说,在这里,当问如何做某件事时,最好表明你已经尝试过做某件事,甚至最好包括一个显示你的输入(+1)和你的预期输出(您也在Quintile
列中显示)非常感谢你的帮助和建议!我会调查的。谢谢你的建议。但是,我相信你有点误解了我的问题。当我说20%的证券时,我不是说20%的证券数量,而是20%的市场价值。每五分之一的证券都应该按价值加权e在“市场价值”栏中但不是证券数量。换句话说,同一个五分之一组中的所有证券的市场价值加起来应该是20%。这就是为什么你的结果与我的结果略有不同。如果你对我的声明还有任何疑问,请告诉我。谢谢!很抱歉回复太晚。我仍然对你的代码有疑问。为什么您是否使用“df$marketvalue”而不是“raw_data$marketvalue”?此“df”来自何处?当我尝试使用此代码时,出现了一个错误:“closure”类型的对象不可子集”我该如何解决这个问题?@user2415342拼写错误。由于您没有通过通常的dput
方法提供数据,我自己制作了一个data.frame并将其命名为df
。只需将df
更改为raw_data
(我编辑了答案以反映这一点)。请让我知道这是否解决了您的问题。干杯!@user2415342有帮助吗?!我不确定,但似乎我无法通过使用“天花板”命令获得正确的解决方案…@user2415342:因为它可以处理您的示例数据,所以您必须更具体地说明我无法获得正确的解决方案。最好是提供新的数据示例显示了其不正确的原因。谢谢。感谢您的建议,下次我将更具体。目前我对Simon提供的上述解决方案很满意
dat$Quintile <- ceiling(cumsum(dat$market) / 0.2)
dat <- dat[order(dat$Security), ]