studio name multiple funcion dcast data conditions column r data.table subset

name - Subset data.table por columna lógica



subset r table (3)

De ?data.table

Avanzado: cuando i es un solo nombre de variable, no se considera una expresión de nombres de columna y, en cambio, se evalúa en el ámbito de la llamada.

Así que dt[x] intentará evaluar x en el alcance de la llamada (en este caso, el entorno global)

Puedes evitar esto usando ( o { o force

dt[(x)] dt[{x}] dt[force(x)]

Tengo una data.table con una columna lógica. ¿Por qué el nombre de la columna lógica no se puede usar directamente para el argumento i ? Vea el ejemplo.

dt <- data.table(x = c(T, T, F, T), y = 1:4) # Works dt[dt$x] dt[!dt$x] # Works dt[x == T] dt[x == F] # Does not work dt[x] dt[!x]


Esto también debería funcionar y es posiblemente más natural:

setkey(dt, x) dt[J(TRUE)] dt[J(FALSE)]


x no está definido en el entorno global. Si intentas esto,

> with(dt, dt[x]) x y 1: TRUE 1 2: TRUE 2 3: TRUE 4

Funcionaría. O esto:

> attach(dt) > dt[!x] x y 1: FALSE 3

EDITAR:

De acuerdo con la documentación, el parámetro j toma el nombre de la columna, de hecho:

> dt[x] Error in eval(expr, envir, enclos) : object ''x'' not found > dt[j = x] [1] TRUE TRUE FALSE TRUE

luego, el parámetro i toma una expresión numérica o lógica (como la propia x debería ser), sin embargo, parece que (data.table) no puede ver x como lógica sin esto:

> dt[i = x] Error in eval(expr, envir, enclos) : object ''x'' not found > dt[i = as.logical(x)] x y 1: TRUE 1 2: TRUE 2 3: TRUE 4