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.

Utilizando base::function con tidyverse y janitor para crear varias tablas cruzadas en R.

Tengo un Data Frame con datos de una encuesta y quiero crear tablas cruzadas entre cada dimensión y diagnóstico. Lo logré exitosamente utilizando los paquetes dplyr y janitor:

library(tidyverse)
library(janitor)

encuesta <- tibble(dimension_1 = c(1, NA, 2, 3, 1, 1, 1, 3, 2, 2),
                   dimension_2 = c(2, 2, 3, 1, 1, 2, 2, 3, 1, 1),
                   diagnóstico_a = as.factor(c("No", NA, "Sí", "No", "Sí", "Sí", "No", "Sí", "Sí", "Sí")),
                   diagnóstico_b = as.factor(c("Sí", "Sí", "No", NA, "Sí", "No", NA, "Sí", "Sí", "Sí")))

encuesta %>% 
  filter(!is.na(diagnóstico_a) & !is.na(dimension_1)) %>% 
  tabyl(dimension_1, diagnóstico_a) %>% 
  adorn_totals() %>%
  adorn_percentages() %>% 
  adorn_pct_formatting() %>% 
  adorn_ns(position = "front") %>% 
  adorn_title(row_name = "dimension_1",
              col_name = "diagnóstico_a")

xtable_fun <- function(data, dimension, diagnosis) {
  data %>% 
    filter(!is.na(.[[diagnosis]]) & !is.na(.[[dimension]])) %>% 
    tabyl(.[[dimension]], .[[diagnosis]]) %>%
    adorn_totals() %>%
    adorn_percentages() %>% 
    adorn_pct_formatting() %>% 
    adorn_ns(position = "front") %>% 
    adorn_title(row_name = dimension,
                col_name = diagnosis)
}

xtable_fun(encuesta, "dimension_1", "diagnóstico_a")

Creo que el error está en la forma en que uso los argumentos, ya que nunca había intentado utilizar mis propias funciones antes y no encuentro la solución.

Gracias por tu ayuda.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    El mensaje de error sugiere que puede haber un error tipográfico en el argumento de la función, específicamente con la palabra ‘diagnose’. Debería ser ‘diagnosis’:

    xtable_fun <- function(data, dimension, diagnosis) {
      data %>% 
        filter(!is.na(.[[diagnosis]] & !is.na(.[[dimension]]))) %>%
        tabyl(.[[dimension]], .[[diagnosis]]) %>%
        adorn_totals() %>%
        adorn_percentages() %>%
        adorn_pct_formatting() %>%
        adorn_ns(position = "front") %>%
        adorn_title(row_name = dimension,
                    col_name = diagnosis)
    }
    
    xtable_fun(survey, "dimension_1", "diagnosis_a")
    

    Esto debería producir la salida deseada. También cambié el código para usar corchetes dobles (por ejemplo, .[[diagnosis]]) en lugar de corchetes simples (por ejemplo, .[diagnosis]) para hacer referencia correctamente a las columnas del marco de datos como entradas.

Comments are closed.