我有一系列具有其他特征的金融公司回报。数据标题是:
头(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'的十分位数排名。我愿意不使用'十分'功能,但当我尝试使用'分位数'或其他工具时,我似乎无法生成十分位数排名......
感谢您的帮助。
答案 0 :(得分:0)
一种方法是quantile
与findInterval
的组合。 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)
<?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