簡體   English   中英

Rollapply功能不起作用

[英]Rollapply function does not work

我的數據如下:

     gvkey   datadate fyear     cusip curcd      at    ceq  csho   dltt   dvc   nopi  oibdp
 1:  1001 12/31/1981  1981 000165100   USD      NA     NA    NA     NA    NA     NA     NA
 2:  1001 12/31/1982  1982 000165100   USD      NA     NA    NA     NA    NA     NA     NA
 3:  1001 12/31/1983  1983 000165100   USD  14.080  7.823 3.568  4.344 0.000  0.640  2.650
 4:  1001 12/31/1984  1984 000165100   USD  16.267  8.962 3.568  4.181 0.000  0.575  3.208
 5:  1001 12/31/1985  1985 000165100   USD  39.495 13.014 3.988 11.908 0.000  0.623  7.247
 6:  1003 12/31/1981  1981 000354100   USD      NA     NA    NA     NA    NA     NA     NA
 7:  1003 12/31/1982  1982 000354100   USD   5.632  1.983 2.100  1.200 0.000  0.000  1.906
 8:  1003 12/31/1983  1983 000354100   USD   8.529  6.095 2.683  0.950 0.000  0.000  2.138
 9:  1003 12/31/1984  1984 000354100   USD   8.241  6.482 2.683  0.600 0.000  0.000  0.825
10:  1003 01/31/1986  1985 000354100   USD  13.990  6.665 2.683  4.682 0.000  0.000  1.037
11:  1003 01/31/1987  1986 000354100   USD  14.586  7.458 2.683  3.750 0.000  0.000  2.462
12:  1003 01/31/1988  1987 000354100   USD  16.042  7.643 2.683  5.478 0.000  0.000  0.111
13:  1003 01/31/1989  1988 000354100   USD  16.280 -0.194 2.683  0.104 0.000  0.000 -3.680
14:  1003 01/31/1990  1989 000354100   USD  10.109 -0.416 2.683  0.076 0.000  0.000 -1.532
15:  1004 05/31/1981  1980 000361105   USD  83.075 29.721 2.566 23.400 1.019  0.464 11.058
16:  1004 05/31/1982  1981 000361105   USD 113.653 42.423 3.942 29.412 1.582 -0.088 12.652
17:  1004 05/31/1983  1982 000361105   USD 111.288 43.225 3.932 23.504 1.727  0.000 13.174
18:  1004 05/31/1984  1983 000361105   USD 137.228 81.085 6.007 13.040 1.965  0.522 15.208
19:  1004 05/31/1985  1984 000361105   USD 155.405 87.385 6.036 16.415 2.893  0.387 21.398
20:  1004 05/31/1986  1985 000361105   USD 198.287 95.381 9.099 25.022 3.700  1.132 27.282
    prstkc pstkrv prcc_c
 1:     NA     NA     NA
 2:     NA     NA     NA
 3:  0.000    0.0  7.250
 4:  0.000    0.0  3.750
 5:  0.009    0.0 10.125
 6:     NA     NA     NA
 7:  0.000    1.2     NA
 8:  1.200    0.0  5.250
 9:  0.000    0.0  2.750
10:  0.000    0.0  4.375
11:  0.000    0.0  4.250
12:  0.000    0.0  2.750
13:  0.000    0.0  1.750
14:  0.000    0.0  0.750
15:  0.000    0.0 13.625
16:  0.518    0.0  7.625
17:  0.211    0.0  9.375
18:  0.003    0.0 17.250
19:  0.000    0.0 18.500
20:  0.000    0.0 25.875

我想創建一個變量,用於測量變量“ at”的標准偏差。 此變量等於前5個“ at”的標准偏差,例如,該變量的第6個觀測值等於變量“ at”的前5個觀測值的標准偏差。 我的代碼如下:

DT[,ATSD:= data.table::shift(rollapply(at,width=5,FUN=sd,fill=NA,align="right"),1,fill=NA),
by=cusip]

我一直收到以下錯誤消息:

Error in seq.default(start.at, NROW(data), by = by) : 
  wrong sign in 'by' argument

問題似乎是您有cusip實例,而您的at值小於5

library(data.table)
library(zoo)

DT <- data.table(data.frame(Date = c(rep(1:120, 3), 1:4),
                            cusip = c(rep(1:3, rep(120,3)),rep(4,4)),
                            at = rnorm(364)))


DT[,ATSD:=
  data.table::shift(
  rollapply(at,width=5,FUN=sd,fill=NA,align="right"),1,fill=NA),
    by=cusip]

這給了我同樣的錯誤。 然而,以下事實並非如此。

DT2 <- data.table(data.frame(Date = c(rep(1:120, 3), 1:5),
                            cusip = c(rep(1:3, rep(120,3)),rep(4,5)),
                            at = rnorm(365)))


DT2[,ATSD:= data.table::shift(
  rollapply(at,width=5,FUN=sd,fill=NA,align="right"),1,fill=NA),
  by=cusip]

我會對此發表評論,但我沒有所需的聲譽。 我希望這有幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM