如何解决月初虚拟变量
我有一个关于证券交易所的每日收盘价及其几年内的日期的数据集。我进一步创建了一个计数器,计算每天的哪个交易日(因为数据集不包括周末和节假日)。看起来像这样:
df$date <- as.Date(c("2017-03-25","2017-03-26","2017-03-27","2017-03-29","2017-03-30","2017-03-31","2017-04-03","2017-04-04","2017-04-05","2017-04-06","2017-04-07","2017-04-08","2017-04-09"))
df$DayofMonth <- c(18,19,20,21,22,23,1,2,3,4,5,6,7)
df$price <- (100,100.53,101.3,100.94,101.42,101.40,101.85,102,101.9,102.31,102.1,102.23)
我现在想创建一个虚拟变量,每个月的最后3个交易日和下个月的前5个交易日取值为1。因此,在这种情况下,它将看起来像这样:
df$ToM_dummy <- c(0,0)
感谢您的帮助!
解决方法
这是dplyr解决方案。它可能比实际数据要复杂一些,因为您的样本在一个月的第7天停止,并且算法需要知道7并不是该月末-数据只是不完整那个月。
因此,我任意添加一个18天的临界值,以表示如果少于一个月的交易日,我们可以假定该月的数据不完整。您可能需要根据需要进行更改(例如,我不知道在12月或2月是否总是有超过18个交易日)
library(dplyr)
df %>%
mutate(month = lubridate::month(date)) %>%
group_by(month) %>%
mutate(ToM_dummy = +(DayofMonth < 6 |
(DayofMonth > (max(DayofMonth) - 3) &
max(DayofMonth) > 18))) # Change to appropriate number
#> # A tibble: 13 x 5
#> # Groups: month [2]
#> date DayofMonth price month ToM_dummy
#> <date> <dbl> <dbl> <dbl> <int>
#> 1 2017-03-25 18 100 3 0
#> 2 2017-03-26 19 101. 3 0
#> 3 2017-03-27 20 101. 3 0
#> 4 2017-03-29 21 101. 3 1
#> 5 2017-03-30 22 101. 3 1
#> 6 2017-03-31 23 101. 3 1
#> 7 2017-04-03 1 102. 4 1
#> 8 2017-04-04 2 102 4 1
#> 9 2017-04-05 3 102. 4 1
#> 10 2017-04-06 4 102 4 1
#> 11 2017-04-07 5 102. 4 1
#> 12 2017-04-08 6 102. 4 0
#> 13 2017-04-09 7 102. 4 0
数据
df <- structure(list(date = structure(c(17250,17251,17252,17254,17255,17256,17259,17260,17261,17262,17263,17264,17265
),class = "Date"),DayofMonth = c(18,19,20,21,22,23,1,2,3,4,5,6,7),price = c(100,100.53,101.3,100.94,101.42,101.4,101.85,102,101.9,102.31,102.1,102.23)),row.names = c(NA,-13L),class = "data.frame")
df
#> date DayofMonth price
#> 1 2017-03-25 18 100.00
#> 2 2017-03-26 19 100.53
#> 3 2017-03-27 20 101.30
#> 4 2017-03-29 21 100.94
#> 5 2017-03-30 22 101.42
#> 6 2017-03-31 23 101.40
#> 7 2017-04-03 1 101.85
#> 8 2017-04-04 2 102.00
#> 9 2017-04-05 3 101.90
#> 10 2017-04-06 4 102.00
#> 11 2017-04-07 5 102.31
#> 12 2017-04-08 6 102.10
#> 13 2017-04-09 7 102.23
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。