Menetapkan nama kolom dalam grup berdasarkan operasi dengan data.tabel

Saya adalah pengguna baru paket data.table di R. Saya mencoba memberi nama pada kolom baru yang dibuat dengan perintah "grup berdasarkan".

> 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. Saya ingin memberi nama kolom V1 (default) secara langsung (tidak harus menggunakan nama kolom), apakah bisa?
  2. Selain itu, apakah mungkin untuk melakukan beberapa operasi grup dalam satu perintah, yang akan menghasilkan sesuatu seperti:

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

Terima kasih


person statquant    schedule 23.11.2012    source sumber


Jawaban (2)


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

Karena Anda baru mengenal data.table, saya sarankan Anda juga mempelajari halaman bantuan fungsi setnames serta sketsa ?data.table dan data.table.

person Roland    schedule 23.11.2012
comment
+1 Saya tidak yakin apakah statquant ingin mengganti nama kolom by. Saya tidak dapat menemukannya di ?data.table, FAQ, atau S.O. dengan mudah (hebatnya, begitu juga akan menambah ?data.table). Jika mereka menginginkannya, itu adalah: DT[,<same as you>,by=list(newname=x)]. - person Matt Dowle; 23.11.2012
comment
@MatthewDowle Menarik. Namun, hanya menggunakan setnames membuat kodenya tetap sederhana. Saya biasanya lebih suka yang satu kalimat, yang cenderung agak rumit. - person Roland; 23.11.2012
comment
Menarik. Oke, saya mengerti maksud Anda. - person Matt Dowle; 23.11.2012
comment
Terima kasih teman-teman, itu bagus untuk kedua pertanyaan. BTW Matthew, paket ini sangat membantu, saya menangani data.frame dari 5e6 juta baris, dan kotak kuno yang saya miliki sedang di-coring...tidak lagi dengan data.table. - person statquant; 23.11.2012

Agar ringkas, kini Anda dapat menggunakan .() alih-alih list()

DT[, .(z=sum(y)+3, a=mean(y*z)), by=x]
person Gabriel Bénédict    schedule 02.04.2020