system.time(dt[,lapply(cols, function(x) specificMean(data.table(feature=get(x), AM=am))), .SDcols=cols])
пользовательская система прошла
0,010 0,000 0,005
эффективный способ с использованием двух циклов благодаря @ chinsoon12
system.time(dt[,mapply(`/`, .SD[,-"am"], lapply(.SD[am==1, -"am"], mean), SIMPLIFY=FALSE), .SDcols=c("am", cols)])
пользовательская система прошла
0,001 0,000 0,001
Эффективный способ выиграть с помощью одного цикла благодаря @ Cole
system.time(dt[,.SD / lapply(.SD[am == 1], mean, na.rm = TRUE), .SDcols = cols])
пользовательская система прошла
0,001 0,000 0,001