R: scopri quali osservazioni si trovano in ogni "bar" dell'istogramma

0

Domanda

Sto lavorando con il linguaggio di programmazione R. Supponiamo di avere i seguenti dati:

     a = rnorm(1000,10,1)
     b = rnorm(200,3,1)
     c = rnorm(200,13,1)
    
    d = c(a,b,c)
index <- 1:1400

my_data = data.frame(index,d)

Posso fare le seguenti istogrammi dei dati stessi, regolando il "bin" di lunghezza (tramite il "pause" opzione):

hist(my_data, breaks = 10, main = "Histogram #1, Breaks = 10")
 hist(my_data, breaks = 100, main = "Histogram #2, Breaks = 100")
 hist(my_data, breaks = 5, main = "Histogram #3, Breaks = 5")

enter image description here

La mia Domanda: In ciascuno di questi istogrammi ci sono un numero diverso di "bar" (cioè bidoni). Per esempio, nel primo istogramma ci sono 8 bar e nel terzo istogramma ci sono 4 bar. Per ciascuno di questi istogrammi, c'è un modo per scoprire quali osservazioni (dal file originale "d") si trovano in ogni bar?

Adesso sto cercando di farlo manualmente, ad esempio (per istogramma #3)

histogram3_bar1 <- my_data[which(my_data$d < 5 & my_data$d > 0), ]
histogram3_bar2 <- my_data[which(my_data$d < 10 & my_data$d > 5), ]
histogram3_bar3 <- my_data[which(my_data$d < 15 & my_data$d > 10), ]
histogram3_bar4 <- my_data[which(my_data$d < 15 & my_data$d > 20), ]


head(histogram3_bar1)

    index        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

Ma c'è di più "efficiente" di fare questo?

Grazie!

1

Migliore risposta

2

hist per la soluzione della questione del problema, per scoprire che i punti dati sono contenuti in quali intervalli. hist restituisce una lista con il primo membro breaks

Primo, rendere riproducibile il problema impostando il RNG seme.

set.seed(2021)
a = rnorm(1000,10,1)
b = rnorm(200,3,1)
c = rnorm(200,13,1)
d = c(a,b,c)

Ora, salvare il valore di ritorno di hist e hanno findInterval dire che i bidoni dove ogni punti di dati sono in.

h1 <- hist(d, breaks = 10)
f1 <- findInterval(d, h1$breaks)

h1$breaks
# [1] -2  0  2  4  6  8 10 12 14 16

head(f1)
#[1] 6 7 7 7 7 6

I primi sei osservazioni sono intervalli di 6 e 7 con i punti estremi di 8, 10 e 12, come può essere visto di indicizzazione d da f1:

head(d[f1])
#[1]  8.07743 10.26174 10.26174 10.26174 10.26174  8.07743

Per quanto riguarda gli intervalli data dalla fine i punti 8, 10 e 12 sono a destra o a sinistra chiusa, vedere help("findInterval").

Come verifica finale, tabella i valori restituiti da findInterval e vedere se corrispondono dell'istogramma conta.

table(f1)
#f1
#  1   2   3   4   5   6   7   8   9 
#  2  34 130  34  17 478 512 169  24 
h1$counts
#[1]   2  34 130  34  17 478 512 169  24

Per avere gli intervalli per ogni punto di dati, i seguenti

bins <- data.frame(bin = f1, min = h1$breaks[f1], max = h1$breaks[f1 + 1L])
head(bins)
#  bin min max
#1   6   8  10
#2   7  10  12
#3   7  10  12
#4   7  10  12
#5   7  10  12
#6   6   8  10
2021-11-22 17:37:39

@ Rui Bandaras : grazie per la tua risposta! c'è un modo per aggiungere il "range min-max" per ciascuno di questi tagli? grazie!
stats555

@stats555 Da aggiungere intendi per definire manualmente o per ottenere quelli che hist utilizzato? (La risposta è sì ad entrambe.)
Rui Barradas

Rui Bandaras: grazie per la tua risposta! io mi riferivo a quelli che hist usato? grazie!
stats555

@stats555 Provare minmax <- data.frame(min = h1$breaks[f1], max = h1$breaks[f1 + 1L]);head(minmax). Si modifica la domanda con questo.
Rui Barradas

grazie mille per il vostro aiuto!
stats555

In altre lingue

Questa pagina è in altre lingue

Русский
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................