按季度报告季度化的季度股息

时间:2018-09-07 02:36:32

标签: r quantmod

在过去五年中,我有一家假设公司的季度股息支付历史记录。这是可复制的代码:

Date<-as.Date(c("2013-11-01", "2014-02-01", "2014-05-01", "2014-08-01", "2014-11-01", "2015-02-01", "2015-05-01", "2015-08-01", "2015-11-01", "2016-02-01", "2016-05-01", "2016-08-01", "2016-11-01", "2017-02-01", "2017-05-01", "2017-08-01", "2017-11-01", "2018-02-01", "2018-05-01", "2018-08-01"))
Dividend<-c(0.08, 0.10, 0.10, 0.10, 0.10, 0.11, 0.00, 0.11, 0.11, 0.13, 0.13, 0.13, 0.13, 0.14, 0.14, 0.00, 0.16, 0.15, 0.15, 0.15)
data.frame(Date,Dividend)

具有以下输出:

         Date Dividend
1  2013-11-01     0.08
2  2014-02-01     0.10
3  2014-05-01     0.10
4  2014-08-01     0.10
5  2014-11-01     0.10
6  2015-02-01     0.11
7  2015-05-01     0.00
8  2015-08-01     0.11
9  2015-11-01     0.11
10 2016-02-01     0.13
11 2016-05-01     0.13
12 2016-08-01     0.13
13 2016-11-01     0.13
14 2017-02-01     0.14
15 2017-05-01     0.14
16 2017-08-01     0.00
17 2017-11-01     0.16
18 2018-02-01     0.15
19 2018-05-01     0.15
20 2018-08-01     0.15

我的问题是如何将其转换为显示每个COMPLETE年支付的股息的输出,如果不完整,则忽略第一年和最后一年(例如本例中的2013年和2018年),而不假设年度股息总是等于季度股息x 4(在我的示例中,2015年和2017年没有相同数量的季度股息)。

所以输出看起来像这样:

Date    Dividend
2014    0.40
2015    0.33
2016    0.52
2017    0.44

3 个答案:

答案 0 :(得分:1)

我们可以从数据框中删除最大year和最小year,然后按library(dplyr) library(lubridate) df %>% filter(year(Date) != min(year(Date)) & year(Date) != max(year(Date))) %>% group_by(year = year(Date)) %>% summarise(Dividend = sum(Dividend)) # year Dividend # <dbl> <dbl> #1 2014 0.4 #2 2015 0.33 #3 2016 0.52 #4 2017 0.44 分组并求和。

df$Year <- as.numeric(format(df$Date, "%Y"))
aggregate(Dividend~Year, df[with(df, Year != min(Year) & Year != max(Year)), ],sum)

#  Year Dividend
#1 2014     0.40
#2 2015     0.33
#3 2016     0.52
#4 2017     0.44

R的基数等于

this.setCookies()

答案 1 :(得分:1)

有了data.table,您可以尝试

df<-data.frame(Date,Dividend)
library(data.table)
setDT(df)[,.(TotDiv=sum(Dividend)),
          by=year(Date), ][-c(which.min(year),which.max(year))]
   year TotDiv
1: 2014   0.40
2: 2015   0.33
3: 2016   0.52
4: 2017   0.44

答案 2 :(得分:1)

您如何定义不完整?您可能不知道该公司每年支付4笔div付款,还是2或1(或12)笔付款。根据您的推理,没有其他答案是正确的,因为它们只是假定不应该考虑第一年和去年,但是在2018年11月第四次付款时会发生什么呢?

由于您正在使用quantmod,因此数据应为xts格式。使用configurations.all { resolutionStrategy { failOnVersionConflict() force 'com.magdag.spongycastle:prov:1.58.0.0' force 'com.magdag.spongycastle:core:1.58.0.0' } } 将使用数据集中每个年份的最后可用日期将数据汇总到每年的行。我使用函数的FUN部分返回2列,其中1列有累计的股息,而1列有当年支付的股息数量。由于公司倾向于采用结构化的股息支付方式(1、2、4或12),因此您可以使用支付的最大div数量来过滤不符合此条件的年份。

当您有每年都不支付的特殊股息之类的东西时,这可能会失败。同样,开始派发股息并不总是符合规定。微软从2013年开始支付股息,在每季度支付一次之后,分红只有两次。

apply.yearly