【发布时间】:2017-12-26 10:57:32
【问题描述】:
问题:
是否有使用 data.table 计算几何平均值的干净且快速运行的方法?
背景:
所以我用这个:
my_col_list <- names(mydata)[ my_start:ncol(mydata)]
my_name_list<- paste0(my_col_list, "_", "arithmean")
mydata[, (my_name_list) := unlist(lapply(.SD,
function(x) rollapply(x,
5,
mean,
na.pad = TRUE)),
recursive = F),
.SDcols = my_col_list]
但我想计算geometric mean。我正在处理大约 2000 万行和大约 1500 列,因此首选快速运行的内置。
我看到了这些 (link) 计算几何平均值的方法,但它们是手动编码的,所以它们会变慢。这 (link) 是关于整体几何平均值,而不是窗口/滚动几何平均值。
具有手动编码(运行速度较慢)几何均值的包包括:
- psych,geometric.mean,手工编码
- EnvStats、geoMean,带有更多错误检查的手工编码
- compositions,geometricmean,手工编码
- caroline,geomean,手工编码
- PerformanceAnalytics,mean.geometric,手工编码
- pracma、geomean、手工编码
- FinCal,geometric.mean,一种新颖的手工编码版本(prod vs. mean)
- fdaMixed、dataTrans、手工编码
- evolqg,MeanMatrix,手动编码,对协方差矩阵进行运算,使用 chol
不卑不亢,但很快:
- Gmedian,Gmedian,中位数而不是平均值,但构建得更快。使用 Rcpp 进行计算。
也许,但不确定:
- 旋转,平均值.SO3
【问题讨论】:
-
rollapply(x, 5, geometric.mean, na.pad = TRUE)改成这个 -
您应该发布一个可重现的数据示例以及必要的 library() 调用,以便您的代码运行。
标签: r statistics data.table