19
votes

I am a new user of the data.table package in R. I am trying to give a name to the new column created by a "group by" command

> DT = data.table(x=rep(c("a","b"),c(2,3)),y=1:5) 
> DT
x y
1: a 1
2: a 2
3: b 3
4: b 4
5: b 5
> DT[,{z=sum(y);z+3},by=x]
x V1
1: a 6
2: b 15
  1. I would like to name the V1 (default) column directly (not having to use colnames), is it possible?
  2. Additionally, is it possible to perform several group by operations in one command, that would result in something like:

       x V1 V2
    1: a 6  something
    2: b 15 something
    

Thanks

2

2 Answers

26
votes
DT[,list(z=sum(y)+3,a=mean(y*z)),by=x]
   x  z  a
1: a  6  9
2: b 15 60

Since you are new to data.table, I recommend that you also study the help page of the setnames function as well as ?data.table and the data.table vignettes.

1
votes

For conciseness, you can now use .() instead of list()

DT[, .(z=sum(y)+3, a=mean(y*z)), by=x]