我正在尝试计算数据框中两个变量的滚动相关性(数据集中的变量位置分别为 29 和 35)。我运行这些代码行 -
df <- df %>%
mutate (rrcorr_prccq = zoo::rollapply(width = 20, function (x) cor (x[,29], x[,35], method = 'spearman'),by.column = FALSE, fill = NA)
)
但是我遇到了以下错误-
Error during wrapup: ℹ In argument: `rrcorr_prccq = zoo::rollapply(...)`.
Caused by error in `zoo()`:
! “x” : attempt to define invalid zoo object
Error: no more error handlers available (recursive errors?); invoking 'abort' restart
这是有关数据集的一些信息 -
df <- structure(list(gvkey = c("001003", "001003", "001003", "001003",
"001004", "001004"), datadate = structure(c(7335, 7424, 7516,
7608, 7363, 7455), class = "Date"), datayear = c(1990, 1990,
1990, 1990, 1990, 1990), fyearq = c(1989, 1990, 1990, 1990, 1989,
1989), fqtr = c(4, 1, 2, 3, 3, 4), fyr = c(1, 1, 1, 1, 5, 5),
indfmt = c("INDL", "INDL", "INDL", "INDL", "INDL", "INDL"
), consol = c("C", "C", "C", "C", "C", "C"), popsrc = c("D",
"D", "D", "D", "D", "D"), datafmt = c("STD", "STD", "STD",
"STD", "STD", "STD"), tic = c("ANTQ", "ANTQ", "ANTQ", "ANTQ",
"AIR", "AIR"), cusip = c("000354100", "000354100", "000354100",
"000354100", "000361105", "000361105"), conm = c("A.A. IMPORTING CO INC",
"A.A. IMPORTING CO INC", "A.A. IMPORTING CO INC", "A.A. IMPORTING CO INC",
"AAR CORP", "AAR CORP"), curcdq = c("USD", "USD", "USD",
"USD", "USD", "USD"), datacqtr = c("1989Q4", "1990Q1", "1990Q2",
"1990Q3", "1990Q1", "1990Q2"), datafqtr = c("1989Q4", "1990Q1",
"1990Q2", "1990Q3", "1989Q3", "1989Q4"), cshoq = c(2.683,
2.683, 2.683, 2.033, 16.07, 16.082), saleq = c(4.913, 3.506,
3.153, 2.678, 112.278, 119.396), cik = c("0000730052", "0000730052",
"0000730052", "0000730052", "0000001750", "0000001750"),
costat = c("I", "I", "I", "I", "A", "A"), mkvaltq = c(NA_real_,
NA_real_, NA_real_, NA_real_, NA_real_, NA_real_), prccq = c(0.125,
NA, 0.094, 0.094, 31.125, 21.25), prchq = c(0.75, NA, 0.094,
0.094, 37.125, 31.75), prclq = c(0.125, NA, 0.094, 0.094,
30, 20.25), del_saleq = c(NA, -1.407, -0.353, -0.475, NA,
7.11799999999999), del_prccq = c(NA, NA, NA, 0, NA, -9.875
), del_prchq = c(NA, NA, NA, 0, NA, -5.375), del_prclq = c(NA,
NA, NA, 0, NA, -9.75), RET_prccq = c(NA, NA, NA, 0, NA, -0.317269076305221
), RET_prchq = c(NA, NA, NA, 0, NA, -0.144781144781145),
RET_prclq = c(NA, NA, NA, 0, NA, -0.325), mkvaltq_prccq = c(0.335375,
NA, 0.252202, 0.191102, 500.17875, 341.7425), mkvaltq_prchq = c(2.01225,
NA, 0.252202, 0.191102, 596.59875, 510.6035), mkvaltq_prclq = c(0.335375,
NA, 0.252202, 0.191102, 482.1, 325.6605), REV_prccq = c(NA,
NA, -1.39967169173916, -2.48558361503281, NA, 0.0208285478101202
), REV_prchq = c(NA, NA, -1.39967169173916, -2.48558361503281,
NA, 0.0139403666445686), REV_prclq = c(NA, NA, -1.39967169173916,
-2.48558361503281, NA, 0.0218571180723483)), row.names = c(NA,
-6L), class = c("tbl_df", "tbl", "data.frame"))
问题是
rollapply
的第一个参数是数据,而您没有提供数据作为第一个参数。这样做,一切正常:
library(dplyr)
df |> mutate(rrcorr_prccq = zoo::rollapply(df, width = 20, function (x) cor(x[,29], x[,35], method = 'spearman'), by.column = FALSE, fill = NA))
输出:
# A tibble: 6 × 38
gvkey datadate datayear fyearq fqtr fyr indfmt consol popsrc datafmt
<chr> <date> <dbl> <dbl> <dbl> <dbl> <chr> <chr> <chr> <chr>
1 001003 1990-01-31 1990 1989 4 1 INDL C D STD
2 001003 1990-04-30 1990 1990 1 1 INDL C D STD
3 001003 1990-07-31 1990 1990 2 1 INDL C D STD
4 001003 1990-10-31 1990 1990 3 1 INDL C D STD
5 001004 1990-02-28 1990 1989 3 5 INDL C D STD
6 001004 1990-05-31 1990 1989 4 5 INDL C D STD
# ℹ 28 more variables: tic <chr>, cusip <chr>, conm <chr>, curcdq <chr>,
# datacqtr <chr>, datafqtr <chr>, cshoq <dbl>, saleq <dbl>, cik <chr>,
# costat <chr>, mkvaltq <dbl>, prccq <dbl>, prchq <dbl>, prclq <dbl>,
# del_saleq <dbl>, del_prccq <dbl>, del_prchq <dbl>, del_prclq <dbl>,
# RET_prccq <dbl>, RET_prchq <dbl>, RET_prclq <dbl>, mkvaltq_prccq <dbl>,
# mkvaltq_prchq <dbl>, mkvaltq_prclq <dbl>, REV_prccq <dbl>, REV_prchq <dbl>,
# REV_prclq <dbl>, rrcorr_prccq <lgl>
注意:在示例中,您只给出了 6 行,因此该示例将每个值都指定为 NA。在实际数据中,情况并非如此。