Crear una variable en data.table con la variable guardada en otra variable.
Tengo un problema muy simple. Supongamos que tengo una tabla de datos:
dt = data.table(a = rnorm(10), b = rnrom(10))
Quería crear una nueva variable en dt
llamada c = b * 2
. Pero quería tomar el nombre de variable tanto b
como c
de otras variables almacenadas en una cadena. Ejemplo:
newvar = "c"
var = "b"
Puedo hacer esto fácilmente sin usar la tabla de datos de la siguiente manera:
setDT(dt)
dt[, (newvar) := get(var) * 2]
Quería saber cómo puedo hacer lo mismo en la sintaxis del paquete data.table.
davy.ai
Para crear una nueva variable en una
data.table
utilizando nombres de variables almacenados en cadenas de texto, puedes usar las funcioneseval()
yparse()
en combinación con el operador de asignación:=
. Aquí tienes un ejemplo:Este código creará una nueva variable llamada
c
endt
que es igual ab
multiplicado por 2. La funcióneval()
evalúa una cadena de texto como código R, y la funciónparse()
convierte una cadena de texto en una expresión que puede ser evaluada por R. El operador:=
asigna el resultado de la expresión a una nueva variable endt
.Dado que
data.table
está optimizado para la manipulación rápida de conjuntos de datos grandes, el uso deeval()
yparse()
en un conjunto de datos pequeño como este puede no ser significativamente más rápido que el uso desetDF()
y[]
en el ejemplo proporcionado en la pregunta. Sin embargo, para conjuntos de datos más grandes, la sintaxis dedata.table
puede ser más rápida y eficiente.