tablas - seleccionar columnas en r
Eliminar filas condicionalmente de una tabla de datos en R (1)
En este escenario no es tan diferente a data.frame
data <- data[ menuitem != ''coffee'' | amount > 0]
Eliminar / agregar fila por referencia es para ser implementado. Encontrarás más información en esta pregunta.
Respecto a la velocidad:
1 Puedes beneficiarte de las claves haciendo algo como:
setkey(data, menuitem)
data <- data[!"coffee"]
que será más rápido que los data <- data[ menuitem != ''coffee'']
. Sin embargo, para aplicar los mismos filtros que preguntaste en la pregunta, necesitarás una combinación continua (he terminado mi hora de almuerzo, puedo agregar algo más tarde :-)).
2 Incluso sin datos clave. La mesa es mucho más rápida para una tabla relativamente grande (velocidad similar para un puñado de filas)
dt<-data.table(id=sample(letters,1000000,T),var=rnorm(1000000))
df<-data.frame(id=sample(letters,1000000,T),var=rnorm(1000000))
library(microbenchmark)
> microbenchmark(dt[ id == "a"], df[ df$id == "a",])
Unit: milliseconds
expr min lq median uq max neval
dt[id == "a"] 24.42193 25.74296 26.00996 26.35778 27.36355 100
df[df$id == "a", ] 138.17500 146.46729 147.38646 149.06766 154.10051 100
Tengo una tabla de datos con campos {id, menuitem, amount}.
Estos son datos de transacciones; por lo tanto, las identificaciones son únicas, pero se repiten menuitem. Ahora, quiero eliminar todas las entradas donde menuitem == ''coffee''
.
Además, desea eliminar todas las filas donde la amount <= 0
;
¿Cuál es la forma correcta de hacer esto en data.table?
Puedo usar data$menuitem!=''coffee''
y luego indexar int en data [], pero eso no es necesariamente eficiente y no se aprovecha de data.table.
Cualquier puntero en la dirección correcta son apreciados.