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.

Creando una función que muta dos variables de columna para columnas con el mismo número de ID.

Tengo un marco de datos:

“`
ID <- c(1:10)
act1144 <- c("Dormitorio", "Dormitorio", "Dormitorio", "Sala", "Cocina", "Dormitorio", "Dormitorio", "Dormitorio", "Sala", "Cocina")
wher144 <- c("Casa", "Casa", "Casa", "Casa", "Casa", "Casa", "Casa", "Casa", "Casa", "Casa")
data <- data.frame(ID, act1144, wher144)
““
y estoy usando mutate para hacer una nueva columna basada en las condiciones de otras dos columnas, por ejemplo.

““`
library(dplyr)
data <- data %>%
mutate(new144 = casewhen(
act1144 == “Dormitorio” & wher144 == “Casa” ~ “Dormitorio”,
act1144 == “Cocina” & wher144 == “Casa” ~ “Cocina”,
act1144 == “Sala” & wher144 == “Casa” ~ “Sala”,
act1144 == “Baño” & wher144 == “Casa” ~ “Baño”))
“““

Mi marco de datos real tiene las variables act11 – act1144 y wher1 – wher144. Me gustaría poner el código anterior en una función para recorrer todas las combinaciones coincidentes de act1 ** y wher **, como en el ejemplo anterior, sin tener que volver a ejecutar el código 144 veces.

¿Es esto posible? Gracias de antemano.

Tags:  ,

Answer

  1. Avatar for davy.ai

    Sí, es posible crear una función para recorrer todas las combinaciones coincidentes de act1_** y wher_**. Puede usar la función lapply para recorrer las variables y aplicar la función mutate a cada combinación. Por ejemplo:

    library(dplyr)
    
    <h1>Crea una lista de las variables</h1>
    
    vars <- list(act1<em>1, act1</em>2, ..., act1<em>144, wher</em>1, wher<em>2, ..., wher</em>144)
    
    <h1>Crea una función para aplicar la función mutate a cada combinación</h1>
    
    mutate<em>func <- function(x, y) {
      data %>%
        mutate(new</em>144 = case_when(
          x == "Dormitorio" & y == "Casa" ~ "Dormitorio",
          x == "Cocina" & y == "Casa" ~ "Cocina",
          x == "Sala de estar" & y == "Casa" ~ "Sala de estar",
          x == "Baño" & y == "Casa" ~ "Baño"))
    }
    
    <h1>Aplica la función a cada combinación</h1>
    
    data <- lapply(vars, mutate_func)
    

Comments are closed.