Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 根据另一列的排名计算一列的总和_R - Fatal编程技术网

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), ]