nberDates()
在 tis 包中给出了衰退开始和结束日期的列表。
将其转换为一组虚拟对象以对现有时间序列进行子集化的最巧妙、最短的方法是什么?
因此,nberDates 本身会产生...
> nberDates()
Start End
[1,] 18570701 18581231
[2,] 18601101 18610630
[3,] 18650501 18671231
[4,] 18690701 18701231
[5,] 18731101 18790331
[6,] 18820401 18850531
并str(nberDates())
说类型是“ Named num
。”
我在 xts 中有另一个时间序列对象,目前看起来像这样......
> head(mydata)
value
1966-01-01 15
1967-01-01 16
1968-01-01 20
1969-01-01 21
1970-01-01 18
1971-01-01 12
我想要第二个变量,recess,即在经济衰退期间为 1:
> head(mydata)
value recess
1966-01-01 15 0
1967-01-01 16 0
1968-01-01 20 0
1969-01-01 21 0
1970-01-01 18 1
1971-01-01 12 0
(我的目标是我希望能够将衰退中的价值与衰退中的价值进行比较。)
我正在尝试但不起作用的笨重的东西是......
((index(mydata) > as.Date(as.character(nberDates()[,1]),format="%Y%m%d")) & (index(mydata) < as.Date(as.character(nberDates()[,2]),format="%Y%m%d")))
但这会产生...
[1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[13] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[25] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[37] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
Warning messages:
1: In `>.default`(index(mydata), as.Date(as.character(nberDates()[, :
longer object length is not a multiple of shorter object length
2: In `<.default`(index(mydata), as.Date(as.character(nberDates()[, :
longer object length is not a multiple of shorter object length
我知道我可以用一个笨重的 for 循环来解决这个问题,但这总是向我暗示我做错了 R。
有什么建议么?