Data.table: Operaciones de fila en data.table usando `by = .I`

Creado en 7 jun. 2016  ·  3Comentarios  ·  Fuente: Rdatatable/data.table

Estaba explorando alternativas de cómo hacer operaciones de fila en data.table y creo que encontré un error.

Estas tres líneas de código deberían devolver el mismo resultado. Sin embargo, el resultado de by = .I parece devolver un resultado incorrecto.

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 ]

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

Low bug

Todos 3 comentarios

Alternativamente, by = .I debería dar un error, aunque sería bueno que funcionara con un i-expression presente.

Problema similar con el uso de .N en by (de nuevo, algo que uno podría intentar ingenuamente - dt[, ..., by = 1:.N] - aunque esta expresión en particular da un error, no es realmente el error "correcto").

¿Por qué no agregar la función "por filas" usando by = .I , que suena intuitivo?

1063

Hola @leoluyi ,

el comportamiento de by = .I es equivalente a by = NULL . Eche un vistazo a esta discusión de SO https://stackoverflow.com/questions/37667335/row-operations-in-data-table-using-by-i

¿Fue útil esta página
0 / 5 - 0 calificaciones