R: Histogramın her "çubuğunda" hangi gözlemlerin bulunduğunu öğrenin

0

Soru

R programlama dili ile çalışıyorum. Aşağıdaki verilere sahip olduğumu varsayalım:

     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)

"Bin" uzunluğunu ayarlayarak aynı verilerin aşağıdaki histogramlarını yapabilirim ("breaks" seçeneği ile):

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

Sorum şu: Bu histogramların her birinde farklı sayıda "çubuk" (yani kutu) var. Örneğin, ilk histogramda 8 çubuk ve üçüncü histogramda 4 çubuk vardır. Bu histogramların her biri için, her çubukta hangi gözlemlerin (orijinal "d" dosyasından) bulunduğunu öğrenmenin bir yolu var mı?

Şu anda bunu manuel olarak yapmaya çalışıyorum, örneğin (histogram #3 için)

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

Fakat bunu yapmanın daha "verimli" bir yolu var mı?

Teşekkürler!

1

En iyi cevabı

2

hist kendisi, hangi veri noktalarının hangi aralıklarda olduğunu bulmak için sorunun sorununa çözüm sağlayabilir. hist ilk üyeye sahip bir liste döndürür breaks

İlk olarak, RNG tohumunu ayarlayarak sorunu tekrarlanabilir hale getirin.

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

Şimdi, dönüş değerini kaydedin hist ve findInterval kutulara her veri noktasının nerede olduğunu söyleyin.

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

İlk altı gözlem, indekslemede görülebileceği gibi, son noktalar 8, 10 ve 12 olan 6 ve 7 aralıklarıdır d tarafından f1:

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

8, 10 ve 12 uç noktalarıyla verilen aralıkların sola mı yoksa sağa mı kapalı olduğuna ilişkin olarak bkz. help("findInterval").

Son bir kontrol olarak, tarafından döndürülen değerleri tablo findInterval ve histogramın sayılarına uyup uymadıklarına bakın.

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

Her veri noktası için aralıklara sahip olmak için aşağıdakileri yapın

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: cevabınız için teşekkür ederiz! bu kesintilerin her biri için "min-max aralığı" eklemenin bir yolu var mı? teşekkür ederim!
stats555

@ stats555 Eklemek için bunları manuel olarak tanımlamayı mı yoksa bunları elde etmeyi mi kastediyorsunuz hist kullanılan? (Cevap her ikisine de evet olmaktır.)
Rui Barradas

Rui Bandaras: cevabınız için teşekkür ederiz! his'in kullandıklarından mı bahsediyordum? teşekkür ederim!
stats555

@ stats555 Deneyin minmax <- data.frame(min = h1$breaks[f1], max = h1$breaks[f1 + 1L]);head(minmax). Soruyu bununla birlikte düzenleyecektir.
Rui Barradas

yardımlarınız için çok teşekkür ederim!
stats555

Diğer dillerde

Bu sayfa diğer dillerde

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