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.
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’:
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.