Data.table: Operações de linha em data.table usando `by = .I`

Criado em 7 jun. 2016  ·  3Comentários  ·  Fonte: Rdatatable/data.table

Eu estava explorando alternativas de como fazer operações de linha em data.table e acho que encontrei um bug.

Essas três linhas de código devem retornar o mesmo resultado. No entanto, o resultado de by = .I parece retornar um resultado errado.

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 ]

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

Low bug

Todos 3 comentários

Alternativamente, by = .I deve dar um erro, embora seja bom que funcione com um i-expression presente.

Problema semelhante com o uso de .N em by (novamente, pode-se tentar ingenuamente - dt[, ..., by = 1:.N] - embora esta expressão em particular forneça um erro, não é realmente o erro "certo").

Por que não apenas adicionar o recurso "rowwise" usando by = .I , que parece intuitivo.

1063

Olá @leoluyi ,

o comportamento de by = .I é equivalente a by = NULL . Dê uma olhada nesta discussão de SO https://stackoverflow.com/questions/37667335/row-operations-in-data-table-using-by-i

Esta página foi útil?
0 / 5 - 0 avaliações