按R中的分组计算内的十分位秩
我有一系列财务公司回报与其他特点。数据标题为: 主管(公司ReturnsNameScore)按R中的分组计算内的十分位秩,r,R,我有一系列财务公司回报与其他特点。数据标题为: 主管(公司ReturnsNameScore) 我可以计算整个期间的市值十分位数排名(1到10),这可以在“marketCapDecile”变量中看到。我使用“StatMeasures”包中的“decile”函数作为获取十分位秩的简单方法,但当我尝试使用该函数按日期获取十分位秩时,出现以下错误: 截止日期(companyReturnsNameScore,companyReturnsNameScore$日期,十分位数(companyReturnsNa
我可以计算整个期间的市值十分位数排名(1到10),这可以在“marketCapDecile”变量中看到。我使用“StatMeasures”包中的“decile”函数作为获取十分位秩的简单方法,但当我尝试使用该函数按日期获取十分位秩时,出现以下错误: 截止日期(companyReturnsNameScore,companyReturnsNameScore$日期,十分位数(companyReturnsNameScore$市值)) FUN(X[[i]],…)中出错:找不到函数“FUN” 函数“decile”存在,因为我可以在“by…”操作之外无错误地运行,但当我将它放在里面时,我得到了错误 如何使用“by”函数按日期生成“marketCap”的十分位等级。我不愿意使用“分位数”功能,但当我尝试使用“分位数”或其他工具时,我似乎无法生成“分位数”排名
感谢您的帮助。一种方法是将
分位数
与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
#例如设置虚拟向量
temp一种方法是将分位数
与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
#例如设置虚拟向量
如果输入因子的长度小于2,tempdecile
将始终抛出警告。我更新了您的测试数据框,使其具有多个日期
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
我会使用库(purrr);库(dplyr)
而不是本场景中的by
,因为by
需要在整个数据帧上工作的函数
df %>% split(.$date) %>% map_df(~ mutate(., date_decile = decile(mc)))
PERMNO date TICKER PRC VOL RET SHROUT mc date_decile
1 85814 19980831 CTAC 6.1875 27989 -0.489691 6431 39791.81 1
2 85814 19980831 CTAC 14.7500 5658 -0.180556 6275 92556.25 10
3 85814 20021031 CTAC 27.5700 97498 1.177725 11388 313967.16 10
4 85814 20021031 CTAC 9.0300 20192 -0.097000 11382 102779.46 1
5 85814 20021031 CTAC 12.6600 15474 0.401993 6400 152958.12 5
如果输入因子的长度小于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
我会使用库(purrr);库(dplyr)
而不是本场景中的by
,因为by
需要在整个数据帧上工作的函数
df %>% split(.$date) %>% map_df(~ mutate(., date_decile = decile(mc)))
PERMNO date TICKER PRC VOL RET SHROUT mc date_decile
1 85814 19980831 CTAC 6.1875 27989 -0.489691 6431 39791.81 1
2 85814 19980831 CTAC 14.7500 5658 -0.180556 6275 92556.25 10
3 85814 20021031 CTAC 27.5700 97498 1.177725 11388 313967.16 10
4 85814 20021031 CTAC 9.0300 20192 -0.097000 11382 102779.46 1
5 85814 20021031 CTAC 12.6600 15474 0.401993 6400 152958.12 5
啊。。。我试图在漂亮的列中获取数据,但由于某种原因,没有成功。对不起,伙计们……呃。。。我试图在漂亮的列中获取数据,但由于某种原因,没有成功。抱歉,伙计们……谢谢@nathan day。事实上,我想出了如何在没有错误的情况下运行十分位。我只需要在没有参数的情况下调用函数:现在的问题是捕获那些十分位秩>companyReturnsNameScore$marketcapdecilerank您可以将原始(大)数据帧配对,使其每个日期只有一行,或者你可以合并成十分位,这样大数据框在特定日期的每一次观察(行)中都会有相同的十分位值。谢谢@nathan day。事实上,我想出了如何在没有错误的情况下运行十分位。我只需要在没有参数的情况下调用函数:现在的问题是捕获那些十分位秩>companyReturnsNameScore$marketcapdecilerank您可以将原始(大)数据帧配对,使其每个日期只有一行,或者你可以合并成十分位,这样大数据框对于特定日期的每个观察值(行)都具有相同的十分位值。