Data.table: Operasi baris di data.table menggunakan `by = .I`

Dibuat pada 7 Jun 2016  ·  3Komentar  ·  Sumber: Rdatatable/data.table

Saya sedang mengeksplorasi alternatif bagaimana melakukan operasi baris di data.table dan saya pikir saya telah menemukan bug.

Tiga baris kode ini harus mengembalikan hasil yang sama. Namun, hasil by = .I tampaknya mengembalikan hasil yang salah.

dt[, sdd := sum(.SD[, 2:4, with=FALSE]), by = 1:NROW(dt) ]
dt[, rowpos := .I][ , sdd := sd(.SD[, -1, with=FALSE]), by = rowpos ]
dt[ , sdd := sd(.SD[, -1, with=FALSE]), by = .I ]

contoh data:
dt <- data.table(V0 =LETTERS[c(1,1,2,2,3)], V1=1:5, V2=3:7, V3=5:1)

Low bug

Semua 3 komentar

Atau, by = .I akan memberikan kesalahan, meskipun akan lebih baik jika itu berfungsi dengan hadiah i-expression .

Masalah serupa dengan menggunakan .N di by (sekali lagi seseorang mungkin mencoba secara naif - dt[, ..., by = 1:.N] - meskipun ekspresi khusus ini memberikan kesalahan, itu sebenarnya bukan kesalahan "benar").

Mengapa tidak menambahkan fitur "rowwise" dengan menggunakan by = .I , yang terdengar intuitif.

1063

Hai @leoluyi ,

perilaku by = .I setara dengan by = NULL . Lihat diskusi SO ini https://stackoverflow.com/questions/37667335/row-operations-in-data-table-using-by-i

Apakah halaman ini membantu?
0 / 5 - 0 peringkat