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.

R: Creando una tabla de niveles de factor

Estoy trabajando con el lenguaje de programación R. Supongamos que tengo los siguientes datos:

var1 <- c("A1", "A2", "A3")
var2 <- c("B1", "B2")

var_1_a <- as.factor(sample(var1, 100, replace=TRUE, prob=c(0.3, 0.3, 0.4)))
var_1_b <- as.factor(sample(var2, 100, replace=TRUE, prob=c(0.5, 0.5)))

my_data = data.frame(var_1_a, var_1_b)

head(my_data)

  var_1_a var_1_b
1      A2      B1
2      A2      B2
3      A1      B2
4      A2      B2
5      A2      B2
6      A3      B1

Estoy tratando de crear un nuevo conjunto de datos que resuma el conjunto de datos anterior, algo así:

new_data = data.frame(var_1_a = table(my_data$var_1_a), var_2_a = table(my_data$var_1_b))

Pero esto resulta en el siguiente error:

Error in data.frame(var_1_a = table(my_data$var_1_a), var_2_a = table(my_data$var_1_b)) : 
  arguments imply differing number of rows: 3, 2

¿Alguien podría decirme qué estoy haciendo mal?

¡Gracias!

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    El problema con el código es que el marco de datos “new_data” está intentando fusionar tablas de diferentes longitudes: “var_1_a” tiene 3 categorías mientras que “var_1_b” tiene 2 categorías. Para resolver esto, podemos utilizar la función “addNA” para agregar la categoría faltante en “var_1_b”, de la siguiente manera:

    “`{r}
    new_data = data.frame(var_1_a = table(my_data$var_1_a), var_1_b = table(addNA(my_data$var_1_b)))


    La función "addNA" agrega una categoría "NA" a "var_1_b", lo que resuelve el error de número de filas diferente. El nuevo marco de datos "new_data" resultante debería lucir algo así:

    var_1_a var_1_b
    1 A1 22
    2 A2 34
    3 A3 44
    NA 0 0
    “`

    donde se muestran los recuentos de frecuencia para “var_1_a” y “var_1_b”, incluyendo un recuento de 0 para los valores faltantes (si los hay).

Comments are closed.