R data.table: reuse aggregation

I want to apply the same aggregation to multiple data tables without overwriting the aggregation scheme.

Consider

dt1 <- data.table(id = c(1,2), a = rnorm(10), b = rnorm(10), c = rnorm(10)) dt2 <- data.table(id = c(1,2), a = rnorm(10), b = rnorm(10), c = rnorm(10)) dt1_aggregates <- dt1[, .(mean_a=mean(a), sd_a=sd(a), mean_b=mean(b), sd_b=sd(b)), by=id] dt2_aggregates <- dt2[, .(mean_a=mean(a), sd_a=sd(a), mean_b=mean(b), sd_b=sd(b)), by=id] 

Is there a way to reuse the dt1_aggregates aggregation scheme for dt2 without writing it twice?

+5
source share
1 answer

You can specify the expression you want, and then evaluate it in the data table.

 my.call=quote(list(mean_a=mean(a), sd_a=sd(a), mean_b=mean(b), sd_b=sd(b))) dt1[, eval(my.call), by=id] 

Gives out

  id mean_a sd_a mean_b sd_b 1: 1 0.004165423 0.7504691 -0.05001424 1.4440434 2: 2 -0.430910188 0.9648096 0.26918995 0.8680997 

and

 dt2[, eval(my.call), by=id] 

Gives out

  id mean_a sd_a mean_b sd_b 1: 1 0.2974145 1.191863 -0.0588854 0.7896988 2: 2 -0.4642856 1.438937 0.3612607 1.0581702 
+7
source

Source: https://habr.com/ru/post/1214276/


All Articles