R:找出哪些观察值位于直方图的每个 "bar" 中
R: Find out which observations are located in each "bar" of the histogram
我正在使用 R 编程语言。假设我有以下数据:
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”长度(通过“breaks”选项)制作相同数据的以下直方图:
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")
我的问题:在这些直方图中的每一个中都有不同数量的“条”(即箱)。例如,在第一个直方图中有 8 个柱,在第三个直方图中有 4 个柱。对于这些直方图中的每一个,是否有办法找出每个条形图中的观察值(来自原始文件“d”)?
现在,我正在尝试手动执行此操作,例如(对于直方图 #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
但是有没有更“有效”的方法来做到这一点?
谢谢!
hist
本身就可以提供问题的解法,找出哪些数据点在哪些区间。 hist
return 是第一个成员 breaks
的列表
首先,通过设置 RNG 种子使问题可重现。
set.seed(2021)
a = rnorm(1000,10,1)
b = rnorm(200,3,1)
c = rnorm(200,13,1)
d = c(a,b,c)
现在,保存 hist
的 return 值并让 findInterval
告诉 bin 每个数据点所在的位置。
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
前六个观察值是区间 6 和 7,端点为 8、10 和 12,可以看出索引 d
f1
:
head(d[f1])
#[1] 8.07743 10.26174 10.26174 10.26174 10.26174 8.07743
至于端点8、10、12给出的区间是左闭还是右闭,见help("findInterval")
。
作为最后的检查,table return 由 findInterval
编辑的值,看看它们是否与直方图的计数相匹配。
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
要获得每个数据点的间隔,如下
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
我正在使用 R 编程语言。假设我有以下数据:
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”长度(通过“breaks”选项)制作相同数据的以下直方图:
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")
我的问题:在这些直方图中的每一个中都有不同数量的“条”(即箱)。例如,在第一个直方图中有 8 个柱,在第三个直方图中有 4 个柱。对于这些直方图中的每一个,是否有办法找出每个条形图中的观察值(来自原始文件“d”)?
现在,我正在尝试手动执行此操作,例如(对于直方图 #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
但是有没有更“有效”的方法来做到这一点?
谢谢!
hist
本身就可以提供问题的解法,找出哪些数据点在哪些区间。 hist
return 是第一个成员 breaks
首先,通过设置 RNG 种子使问题可重现。
set.seed(2021)
a = rnorm(1000,10,1)
b = rnorm(200,3,1)
c = rnorm(200,13,1)
d = c(a,b,c)
现在,保存 hist
的 return 值并让 findInterval
告诉 bin 每个数据点所在的位置。
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
前六个观察值是区间 6 和 7,端点为 8、10 和 12,可以看出索引 d
f1
:
head(d[f1])
#[1] 8.07743 10.26174 10.26174 10.26174 10.26174 8.07743
至于端点8、10、12给出的区间是左闭还是右闭,见help("findInterval")
。
作为最后的检查,table return 由 findInterval
编辑的值,看看它们是否与直方图的计数相匹配。
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
要获得每个数据点的间隔,如下
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