es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para crear una nueva variable en una data.table utilizando nombres de variables almacenados en cadenas de texto, puedes usar las funciones eval() y parse() en combinación con el operador de asignación :=. Aquí tienes un ejemplo:

    library(data.table)
    
    # crear data.table
    dt <- data.table(a = rnorm(10), b = rnorm(10))
    
    # almacenar los nombres de variables en cadenas de texto
    newvar <- "c"
    var <- "b"
    
    # crear nueva variable utilizando la sintaxis de data.table con las funciones eval() y parse()
    dt[, eval(parse(text = newvar)) := eval(parse(text = var)) * 2]
    
    # ver el data.table actualizado
    dt
    

    Este código creará una nueva variable llamada c en dt que es igual a b multiplicado por 2. La función eval() evalúa una cadena de texto como código R, y la función parse() 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 en dt.

    Dado que data.table está optimizado para la manipulación rápida de conjuntos de datos grandes, el uso de eval() y parse() en un conjunto de datos pequeño como este puede no ser significativamente más rápido que el uso de setDF() y [] en el ejemplo proporcionado en la pregunta. Sin embargo, para conjuntos de datos más grandes, la sintaxis de data.table puede ser más rápida y eficiente.

Comments are closed.