mtcars example español empty ejemplos data create crear r dataframe data.table

example - ¿Es posible modificar un data.frame in situ(destructivamente)?



r data frame mtcars (1)

Parece que se puede agregar / eliminar una columna a una data.table de data.table en el lugar , es decir, sin copiar todas las otras columnas a una nueva tabla.

¿Es posible hacer eso con un vainilla data.frame ?

PD. Sé cómo agregar / eliminar columnas "funcionalmente", es decir, crear un nuevo marco sin modificar el original.


Puede eliminar o modificar una columna existente de un data.frame por referencia con data.table::set . Dudo que pueda agregar una columna sin hacer una copia. La razón por la que puede agregar una columna a un data.table sin hacer una copia es que data.table over data.table memory. Ver ?alloc.col para más.

R> library(data.table) R> data(mtcars) R> tracemem(mtcars) [1] "<0x59fef68>" R> set(mtcars, j="mpg", value=NULL) # remove a column R> set(mtcars, j="cyl", value=rep(42, 32)) # modify a column R> untracemem(mtcars) R> str(mtcars) ''data.frame'': 32 obs. of 10 variables: $ cyl : num 42 42 42 42 42 42 42 42 42 42 ... $ disp: num 160 160 108 258 360 ... $ hp : num 110 110 93 110 175 105 245 62 95 123 ... $ drat: num 3.9 3.9 3.85 3.08 3.15 2.76 3.21 3.69 3.92 3.92 ... $ wt : num 2.62 2.88 2.32 3.21 3.44 ... $ qsec: num 16.5 17 18.6 19.4 17 ... $ vs : num 0 0 1 1 0 1 0 1 1 1 ... $ am : num 1 1 1 0 0 0 0 0 0 0 ... $ gear: num 4 4 4 3 3 3 3 4 4 4 ... $ carb: num 4 4 1 1 2 1 4 2 2 4 ...

Compare eso con las operaciones normales de data.frame

R> data(mtcars) R> tracemem(mtcars) [1] "<0x6b3ec30>" R> mtcars[, "mpg"] <- NULL tracemem[0x6b3ec30 -> 0x84de0c8]: tracemem[0x84de0c8 -> 0x84de410]: [<-.data.frame [<- tracemem[0x84de410 -> 0x84de6b0]: [<-.data.frame [<- R> tracemem(mtcars) [1] "<0x84dca30>" R> mtcars[, "cyl"] <- rep(42, 32) tracemem[0x84dca30 -> 0x84dcc28]: tracemem[0x84dcc28 -> 0x84dd018]: [<-.data.frame [<- tracemem[0x84dd018 -> 0x84dff70]: [<-.data.frame [<- R> untracemem(mtcars) R> data(mtcars)