data.frame(..., check.names = FALSE) 中的错误:参数暗示行数不同:6790、6771

Error in data.frame(..., check.names = FALSE) : arguments imply differing number of rows: 6790, 6771

我已经按照说明计算了 ,它可以很好地计算我的数据集的每日 return。现在,当我计算截至最新日期的每月 return 时,我的问题就开始了。使用公式得到每月 return:

logs=data.frame(
     cbind.data.frame(
         prices$Date[-1],
         na.locf(diff(as.matrix(log(prices[,-1])), lag = 20))
         )
     )

我得到:

Error in data.frame(..., check.names = FALSE) : arguments imply differing number of rows: 6790, 6771

可以理解,行号的差异来自于我过去获取每月 return 截至日期的 20 天滞后。我还需要计算截至日期的年度 returns,我想我这样做时也会遇到同样的错误。我尝试使用 merge.data.frame 而不是 cbind.data.frame,但只导致我的计算机崩溃。

我取了数据集的前 10 行和前 10 列:

        Date `2GO`   AAA    AB   ABA   ABG   ABS    AC   ACE   ACR
       <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1  28-Jun-17 23.25  1.61 14.98  0.37 28.25 42.85 841.5  1.61  1.50
2  27-Jun-17 23.90  1.61 14.98  0.37 27.95 42.90 842.5  1.61  1.53
3  23-Jun-17 24.60  1.61 14.98  0.38 27.00 42.90 840.5  1.70  1.57
4  22-Jun-17 24.40  1.61 14.98  0.37 28.05 43.20 855.0  1.67  1.57
5  21-Jun-17 24.80  1.61 15.00  0.37 28.05 43.10 841.5  1.67  1.57
6  20-Jun-17 25.10  1.61 14.68  0.37 28.85 43.45 858.0  1.70  1.58
7  19-Jun-17 24.85  1.61 14.68  0.37 29.05 43.40 860.0  1.75  1.55
8  16-Jun-17 25.70  1.61 14.68  0.38 29.60 43.45 850.0  1.77  1.52
9  15-Jun-17 26.20  1.61 14.48  0.38 29.55 43.30 867.0  1.69  1.53
10 14-Jun-17 26.85  1.61 16.00  0.37 29.50 43.35 867.5  1.69  1.52

使用 Florian 提供的代码并使用 3 作为延迟:

logs=data.frame(
  cbind.data.frame(
    p$Date[-1],
    c(rep(NA,3), na.locf(diff(as.matrix(log(p[,-1])), lag = 3)))
  )
)

仍然报错:

Error in data.frame(..., check.names = FALSE) : arguments imply differing number of rows: 9, 66

有没有办法补救错误/修复行号?

Edited based on updated question.

由于 20 个周期的滞后不存在于初始周期中,您可以用 NA 填充。问题是 prices$Date[-1] 的行数与 na.locf(diff(as.matrix(log(prices[,-1])), lag = 20)) 不同。您应该确保它们的行数相等。例如像这样:

p = read.table(text="Date `2GO`   AAA    AB   ABA   ABG   ABS    AC   ACE   ACR
28-Jun-17 23.25  1.61 14.98  0.37 28.25 42.85 841.5  1.61  1.50
27-Jun-17 23.90  1.61 14.98  0.37 27.95 42.90 842.5  1.61  1.53
23-Jun-17 24.60  1.61 14.98  0.38 27.00 42.90 840.5  1.70  1.57
22-Jun-17 24.40  1.61 14.98  0.37 28.05 43.20 855.0  1.67  1.57
21-Jun-17 24.80  1.61 15.00  0.37 28.05 43.10 841.5  1.67  1.57
20-Jun-17 25.10  1.61 14.68  0.37 28.85 43.45 858.0  1.70  1.58
19-Jun-17 24.85  1.61 14.68  0.37 29.05 43.40 860.0  1.75  1.55
16-Jun-17 25.70  1.61 14.68  0.38 29.60 43.45 850.0  1.77  1.52
15-Jun-17 26.20  1.61 14.48  0.38 29.55 43.30 867.0  1.69  1.53
14-Jun-17 26.85  1.61 16.00  0.37 29.50 43.35 867.5  1.69  1.52",header=T)

p=p[order(p$Date),]

logs=data.frame(
  cbind.data.frame(
    Date = p$Date[4:nrow(p)],
    na.locf(diff(as.matrix(log(p[,-1])), lag = 3))
  )
)

输出:

       Date      X.2GO. AAA           AB         ABA          ABG          ABS
7 19-Jun-17 -0.07740807   0 -0.086102699  0.00000000 -0.015371780  0.001152738
6 20-Jun-17 -0.04289156   0  0.013717636 -0.02666825 -0.023973751  0.003458217
5 21-Jun-17 -0.03564734   0  0.021564178 -0.02666825 -0.053785729 -0.008087855
4 22-Jun-17 -0.01827462   0  0.020229955  0.00000000 -0.035029851 -0.004618946
3 23-Jun-17 -0.02012140   0  0.020229955  0.02666825 -0.066273127 -0.012739026
2 27-Jun-17 -0.03696519   0 -0.001334223  0.00000000 -0.003571432 -0.004651171
1 28-Jun-17 -0.04827800   0  0.000000000  0.00000000  0.007104826 -0.008134850
            AC          ACE          ACR
7 -0.008683123  0.034887259  0.019544596
6 -0.010434877  0.005899722  0.032157112
5 -0.010050336 -0.058155920  0.032365285
4 -0.005830920 -0.046792162  0.012820688
3 -0.020607147  0.000000000 -0.006349228
2  0.001187649 -0.036589447 -0.025807884
1 -0.015915455 -0.036589447 -0.045610511

不要忘记检查输出是否符合预期。我只是向您展示为什么代码不起作用以及匹配语句中行数的方法,我不熟悉您正在执行的操作。希望这对您有所帮助!