通过R中的分组计算十分位数

时间:2016-12-11 14:14:33

标签: r

我有一系列具有其他特征的金融公司回报。数据标题是:

头(companyReturnsNameScore)

  PERMNO     date TICKER     PRC   VOL       RET SHROUT
1  85814 19980831  CTAC  6.1875 27989 -0.489691   6431
2  85814 20021231  CTAC 27.5700 97498  1.177725  11388
3  85814 19990129  CTAC 14.7500  5658 -0.180556   6275
4  85814 20021031  CTAC  9.0300 20192 -0.097000  11382
5  85814 20021129  CTAC 12.6600 15474  0.401993  ...
  marketCap marketCapDeclile
1  39791.81                2
2 313967.16                6
3  92556.25                4
4 102779.46                4
5 152958.12                5

我可以在整个期间计算市值的十分位数(1到10),您可以在'marketCapDecile'变量中看到。我使用'StatMeasures'包中的'十进制'函数作为获得十分位数的简单方法,但是当我尝试使用该函数按日期获得十分位数时,我得到以下错误:

  

由(companyReturnsNameScore,companyReturnsNameScore $日期,等分(companyReturnsNameScore $ marketCap))   FUN(X [[i]],...)出错:找不到“FUN”功能

函数'decile'存在,因为我可以在'by ...'操作之外无错误地运行,但当我把它放在里面时,我得到了错误。

如何使用'by'函数按日期生成'marketCap'的十分位数排名。我愿意不使用'十分'功能,但当我尝试使用'分位数'或其他工具时,我似乎无法生成十分位数排名......

感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

一种方法是quantilefindInterval的组合。 quantile与probs = 1:10/10争论一起,将计算每个十分位数的值,这些值将输入findInterval,构建类别。

# set up dummy vector for example
temp <- 1:100
findInterval(temp, quantile(temp, probs=1:10/10), left.open=T)
[1] 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2
[30] 2 3 3 3 3 3 3 3 3 3 3 4 4 4 4 4 4 4 4 4 4 5 5 5 5 5 5 5 5
[59] 5 5 6 6 6 6 6 6 6 6 6 6 7 7 7 7 7 7 7 7 7 7 8 8 8 8 8 8 8
[88] 8 8 8 9 9 9 9 9 9 9 9 9 9

当然,如果您想要十分位数1到10,只需在结果中添加1L。

答案 1 :(得分:0)

如果输入因子的长度<1,则

<?php $conn = pg_connect(******); $name = pg_escape_string($_POST['name']); $query = "INSERT INTO highscores (name, score) VALUES ('$name', 200)"; $res = pg_query ($conn, $query); pg_close(); ?> 将始终发出警告。 2.我将您的测试数据框更新为具有倍数的日期。

decile

我在这种情况下使用 PERMNO date TICKER PRC VOL RET SHROUT mc 1: 85814 19980831 CTAC 6.1875 27989 -0.489691 6431 39791.81 2: 85814 20021031 CTAC 27.5700 97498 1.177725 11388 313967.16 3: 85814 19980831 CTAC 14.7500 5658 -0.180556 6275 92556.25 4: 85814 20021031 CTAC 9.0300 20192 -0.097000 11382 102779.46 5: 85814 20021031 CTAC 12.6600 15474 0.401993 6400 152958.12 代替library(purrr);library(dplyr),因为by需要能够在整个数据框上运行的函数。

by