r data.table

Insertar una fila en un data.table



(1)

Si tengo un marco de datos

set.seed(12345) df=data.frame(a=rnorm(5),b=rnorm(5))

Puedo agregar una fila por ej.

df[6,] =c(5,6)

Si ahora hago el equivalente en data.table

library(data.table) dt=data.table(df) dt[6,]=c(5,6)

Falla con un error ¿Cuál es la forma correcta de insertar una fila en una tabla de datos?


Para ampliar la respuesta @Franks, si en su caso particular está agregando una fila, es:

set.seed(12345) dt1 <- data.table(a=rnorm(5), b=rnorm(5))

Los siguientes son equivalentes; Encuentro que el primero es más fácil de leer pero el segundo más rápido:

microbenchmark( rbind(dt1, list(5, 6)), rbindlist(list(dt1, list(5, 6))) )

Como podemos ver:

expr min lq median uq max rbind(dt1, list(5, 6)) 160.516 166.058 175.089 185.1470 457.735 rbindlist(list(dt1, list(5, 6))) 130.137 134.037 140.605 149.6365 184.326

Si desea insertar la fila en otro lugar, lo siguiente funcionará, pero no es bonito:

rbindlist(list(dt1[1:3, ], list(5, 6), dt1[4:5, ]))

o incluso

rbindlist(list(dt1[1:3, ], as.list(c(5, 6)), dt1[4:5, ]))

dando:

a b 1: 0.5855288 -1.8179560 2: 0.7094660 0.6300986 3: -0.1093033 -0.2761841 4: 5.0000000 6.0000000 5: -0.4534972 -0.2841597 6: 0.6058875 -0.9193220

Si está modificando una fila en su lugar (que es el enfoque preferido), tendrá que definir el tamaño de la tabla de datos por adelantado, es decir,

dt1 <- data.table(a=rnorm(6), b=rnorm(6)) set(dt1, i=6L, j="a", value=5) # refer to column by name set(dt1, i=6L, j=2L, value=6) # refer to column by number

Gracias a @Boxuan, modifiqué esta respuesta para tener en cuenta tu sugerencia, que es un poco más rápida y fácil de leer.