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.