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.

¿Cómo creo una columna basada en los valores de otra columna que son los nombres de las variables en mi marco de datos cuyos datos quiero llenar en nueva_columna? R

Lamento si la articulación de mi pregunta es confusa, no he podido encontrar hilos similares que aclaren el inglés de mi pregunta.

Estoy trabajando con una muestra de datos que se asemeja a lo que se muestra a continuación:

label1 label2 label3 label#
value1 value4 value7 label2
value2 value5 value8 label1
value3 value6 value9 label3

Estoy tratando de crear una nueva columna, ‘currentvalue’, que lea el valor de label# en una determinada fila, y luego para esa fila llene la columna con el valor de esa fila de la columna que lleva el nombre label#. En otras palabras, quiero que mi resultado se vea así:

label1 label2 label3 label# currentvalue
value1 value4 value7 label2 value4
value2 value5 value8 label1 value2
value3 value6 value9 label3 value9

Las únicas soluciones que se me ocurren para esto implican múltiples bucles for, lo cual imagino es muy ineficiente computacionalmente. He estado buscando en Stack Overflow hilos que me puedan ayudar a escribir una solución vectorizada para esto, pero no creo que haya podido articular bien el problema porque ninguna de mis búsquedas fue útil. Cualquier ayuda es apreciada (incluida la ayuda para expresar mejor mi pregunta).

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para crear una nueva columna ‘currentvalue’ que se popula con el valor de la columna nombrada en ‘label#’, puedes utilizar el paquete dplyr en R. Primero, puedes utilizar la función mutate para crear la nueva columna ‘currentvalue’. Luego, puedes utilizar el operador !! para hacer referencia a la columna nombrada en ‘label#’ y pasarlo a la función mutate. Esto popula cada fila de ‘currentvalue’ con el valor de la columna correspondiente nombrada en ‘label#’. Aquí está el código para hacerlo:

    “`{r}
    library(dplyr)

    crear datos de ejemplo

    data <- data.frame(
    label1 = c(‘valor1’, ‘valor2’, ‘valor3’),
    label2 = c(‘valor4’, ‘valor5’, ‘valor6’),
    label3 = c(‘valor7’, ‘valor8’, ‘valor9’),
    ‘label#’ = c(‘label2’, ‘label1’, ‘label3’)
    )

    utilizar mutate y el operador !! para crear la nueva columna ‘currentvalue’

    data %>%
    mutate(currentvalue = !!sym(label#))

    salida:

    label1 label2 label3 label# currentvalue

    1 valor1 valor4 valor7 label2 valor4

    2 valor2 valor5 valor8 label1 valor2

    3 valor3 valor6 valor9 label3 valor9

    “`

    Este código utiliza el operador !! para hacer referencia a la columna nombrada en ‘label#’. La función sym() se utiliza para convertir el nombre de la columna en un símbolo que puede ser evaluado por el operador !!. La función mutate() crea la nueva columna ‘currentvalue’ y la popula con el valor de la columna correspondiente nombrada en ‘label#’.

Comments are closed.