Il modo canonico per modificare sottoinsiemi dei dati è quello di utilizzare i
per definire il sottoinsieme. Non è possibile utilizzare [
insieme a :=
. O creare uno spazio temporaneo i
come suggerito da @David Arenburg oppure è possibile creare il vettore finale utilizzando una costruzione c(NA, v[-c(1, .N)], NA)
.
DT[, v := c(NA, v[-c(1, .N)], NA)[1:.N], by = class]
Tuttavia, dovresti anche notare che l'ordine delle righe può cambiare quando ad es. impostare una nuova chiave o utilizzare un numero qualsiasi di funzioni. Quindi dovresti stare molto attento con questa operazione.
Il secondo comando può essere eseguito con qualcosa come 'set (DT, j =" v ", i = idx, value = NA)', giusto? Sapresti meglio di me se è più veloce. – Frank
@Frank, se lo stai facendo più e più volte, sì 'set()' sarebbe più veloce in quanto non ha il sovraccarico di '[.data.table'. Non dovrebbe importare qui – Arun