valores una seleccionar rango filtrar filas extraer datos como columnas columna agregar r data.table

seleccionar - Seleccionando un subconjunto de columnas en una tabla de datos.



seleccionar datos en r (4)

Me gustaría imprimir todas las columnas de una tabla de datos dt excepto una de ellas llamada V3 pero no quiero referirme a ella por número sino por nombre. Este es el código que tengo:

dt = data.table(matrix(sample(c(0,1),5,rep=T),50,10)) dt[,-3,with=FALSE] # Is this the only way to not print column "V3"?

Usando el modo de data frame , uno podría hacer esto a través del código:

df = data.frame(matrix(sample(c(0,1),5,rep=T),50,10)) df[,!(colnames(df)%in% c("X3"))]

Entonces, mi pregunta es: ¿hay otra manera de no imprimir una columna en una tabla de datos sin la necesidad de referirse a ella por número? Me gustaría encontrar algo similar a la sintaxis del marco de datos que usé anteriormente, pero usando la tabla de datos.


Aquí hay una manera que usa grep para convertir a numérico y permitir la indexación de columna negativa:

dt[, -grep("^V3$", names(dt)), with=FALSE]

Usted dijo que "V3" iba a ser excluido, ¿verdad?


Desde la versión 1.12.0 en adelante, también es posible seleccionar columnas usando expresiones regulares en sus nombres:

iris_DT <- as.data.table(iris) iris_DT[, .SD, .SDcols = patterns(".e.al")]


Tal vez sea solo en versiones recientes de data.table (estoy usando 1.9.6), pero puedes hacerlo:

dt[, -''V3'', with=FALSE]

Para varias columnas:

dt[, -c(''V3'', ''V9''), with=FALSE]

Tenga en cuenta que las citas alrededor de los nombres de variables son necesarias.


Use una sintaxis muy similar a la de un data.frame , pero agregue el argumento with=FALSE :

dt[, setdiff(colnames(dt),"V9"), with=FALSE] V1 V2 V3 V4 V5 V6 V7 V8 V10 1: 1 1 1 1 1 1 1 1 1 2: 0 0 0 0 0 0 0 0 0 3: 1 1 1 1 1 1 1 1 1 4: 0 0 0 0 0 0 0 0 0 5: 0 0 0 0 0 0 0 0 0 6: 1 1 1 1 1 1 1 1 1

El uso de with=FALSE se explica muy bien en la documentación para el argumento j en ?data.table :

j: Un solo nombre de columna, una sola expresión de nombres de columnas, una list() de expresiones de nombres de columnas, una expresión o función llamada que se evalúa en una lista (incluidos data.frame y data.table que también son listas), o (cuando with=FALSE ) igual que j en [.data.frame .

A partir de la v1.10.2 también es posible hacerlo de la siguiente manera:

keep <- setdiff(names(dt), "V9") dt[, ..keep]

Prefijar un símbolo con .. buscará en el alcance de la llamada (es decir, el entorno global) y su valor se toma como nombres de columna o números ( source ).