r - 每行的 data.table 函数太慢

标签 r data.table

我需要计算每行(6M+ 行)的加权平均值,但这需要很长时间。带有权重的列是一个字符字段,所以 weighted.mean 不能直接使用。

后台数据:

library(data.table)
library(stringr)
values <- c(1,2,3,4)
grp <- c("a", "a", "b", "b")
weights <- c("{10,0,0,0}", "{0,10,0,0}", "{10,10,0,0}", "{0,0,10,0}")
DF <- data.frame(cbind(grp, weights))
DT <- data.table(DF)

string.weighted.mean <- function(weights.x) {
  tmp.1 <- na.omit(as.numeric(unlist(str_split(string=weights.x, pattern="[^0-9]+"))))
  tmp.2 <- weighted.mean(x=values, w=tmp.1)
}

以下是如何使用 data.frames 完成(太慢):
DF$wm <- mapply(string.weighted.mean, DF$weights)

这可以完成工作,但速度太慢(小时):
DT[, wm:=mapply(string.weighted.mean, weights)]

如何改写最后一行以加快速度?

最佳答案

DT[, rowid := 1:nrow(DT)]
setkey(DT, rowid)
DT[, wm :={
    weighted.mean(x=values, w=na.omit(as.numeric(unlist(str_split(string=weights, pattern="[^0-9]+")))))     
}, by=rowid]

关于r - 每行的 data.table 函数太慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14470869/

相关文章:

r - gtsummary::tbl_summary 和唯一变量值

r - 如何在 y 轴的左侧制作 geom_text

R Data.Table 条件连接

r - 在巨大的数据表中计算 NA

r - 更快地计算每个时间步内所有个体之间的距离

r - 具有最小元素的 R data.table 列的索引

r - dplyr 中的过滤器列表变量

R Markdown PowerPoint - 找不到名为 "Title Slide"的布局

r - 如何根据中心和半径在 R 中绘制三维球体?

r - 在 Excel 中快速查看 R 数据框、矢量或数据表