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.

Encuentre cuáles observaciones se encuentran en cada “barra” del histograma.

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

 a = rnorm(1000,10,1)
 b = rnorm(200,3,1)
 c = rnorm(200,13,1)

d = c(a,b,c)

índice <- 1:1400

mis_datos = data.frame(índice,d)

Puedo hacer los siguientes histogramas de los mismos datos ajustando la longitud de la “barra” (a través de la opción “breaks”):

hist(mis_datos, breaks = 10, main = “Histograma #1, Barras = 10”)
hist(mis_datos, breaks = 100, main = “Histograma #2, Barras = 100”)
hist(mis_datos, breaks = 5, main = “Histograma #3, Barras = 5”)

Mi pregunta es: en cada uno de estos histogramas hay un número diferente de “barras” (es decir, barras). Por ejemplo, en el primer histograma hay 8 barras y en el tercer histograma hay 4 barras. ¿Hay alguna manera de averiguar qué observaciones (del archivo original “d”) se encuentran en cada barra en cada uno de estos histogramas?

Actualmente, estoy intentando hacer esto manualmente, por ejemplo (para el tercer histograma):

histograma3_bar1 <- mis_datos[which(mis_datos$d < 5 & mis_datos$d > 0), ]
histograma3_bar2 <- mis_datos[which(mis_datos$d < 10 & mis_datos$d > 5), ]
histograma3_bar3 <- mis_datos[which(mis_datos$d < 15 & mis_datos$d > 10), ]
histograma3_bar4 <- mis_datos[which(mis_datos$d < 20 & mis_datos$d > 15), ]

head(histograma3_bar1)

índice        d

1001 1001 4.156393
1002 1002 3.358958
1003 1003 1.605904
1004 1004 3.603535
1006 1006 2.943456
1007 1007 1.586542

¿Hay alguna manera más “eficiente” de hacer esto?

¡Gracias!

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Sí, hay una manera más eficiente de hacer esto. Una forma es usar la función cut() en R para crear una variable de factor que indique a qué bin pertenece cada observación. Luego puedes usar la función split() para dividir el marco de datos por esta variable de factor y extraer cada subconjunto correspondiente a cada bin. Aquí hay un ejemplo usando el histograma #3:

    # Crea la variable de factor que indica a qué bin pertenece cada observación
    bins <- cut(my_data$d, breaks = 5)
    
    # Divide el marco de datos por la variable de factor
    my_data_split <- split(my_data, bins)
    
    # Extrae el subconjunto correspondiente al tercer bin
    histogram3_bar3 <- my_data_split[[3]]
    
    # Ver la cabeza del subconjunto
    head(histogram3_bar3)
    

    Esto debería darte el mismo resultado que tu enfoque manual, pero será mucho más eficiente y escalable para conjuntos de datos más grandes e histogramas con más bins.

Comments are closed.