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)
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?
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