我想计算data.table中的滚动经验下尾依赖系数,这里是尾依赖系数函数和动物园:: rollapply, 但这非常慢。对于包含1M行的数据,需要超过6个小时。有没有办法更有效地做到这一点?
library(data.table)
set.seed(1)
mydt = as.data.table(data.frame(id = rep(LETTERS[1:4],each=10),
Time = rep(seq(as.Date("2016-01-01"),as.Date("2017-10-01"),"day"),4),
x = round(rnorm(40),2),
y = round(rnorm(40),2)))
Tdc <- function(x, lower = TRUE, k = NULL){
x <- as.matrix(x)
k <- ifelse(is.null(k), floor(sqrt(nrow(x))), as.integer(k))
m <- nrow(x)
N <- ncol(x)
idx <- combn(N, 2)
r <- apply(x, 2, data.table::frank)
if(lower){
td <- apply(idx, 2, function(y)
sum((r[, y[1]] <= k) & (r[, y[2]] <= k)) / k)
} else {
td <- apply(idx, 2, function(y)
sum((r[, y[1]] > m - k) & (r[, y[2]] > m - k)) / k)
}
return(td)
}
ltdc <- function(y)Tdc(as.data.frame(y[, c("x","y")]))
mydt[,LTDC := zoo::rollapplyr(.SD, 5, ltdc, by.column = FALSE, fill = NA), by = id]
感谢您对我的代码和/或我的想法的想法和评论。谢谢。