Home > front end >  Calculating the number of values in a vector between a set of intervals
Calculating the number of values in a vector between a set of intervals

Time:06-23

Suppose I have a vector a:

set.seed(123)
a = runif(10000) / 2

and a vector of values, intervals:

intervals = seq(0, 0.5, 0.001)

How can I quickly calculate the number of values in a which are between intervals[n] and intervals[n 1]?

For example, the results would like something like (made up numbers):

interval    count
0.000 - 0.001    100 
0.001 - 0.002    300 
0.002 - 0.003    2342

CodePudding user response:

Not completely what you want, but you can use hist to count the numbers in a interval:

set.seed(123)
a = runif(10000) / 2
intervals = seq(0, 0.5, 0.001)

result = hist(a, intervals, plot=F)

Output:

> result$counts
  [1] 20 17 24 15 23 15 28 23 15 26 15 25 28 23 20 20 18 20 28 14 10 25 30 16 23 19 21 18 20 29 22 11 19 17 16 22 18 20
 [39] 29 15 21 13 19 15 17 12 20 12 19 25 17 16 17 13 24 20 19 17 16 26 27 17 12 20 17 18 16 32 24 18 24 24 21 17 23 17
 [77] 25 19 25 23 29 25 26 18 17 20 24 20 14 18 19 22 20 21 16 22 21 18 18 16 20 19 19 19 18 16 12 13 22 26 18 21 23 23
[115] 17 23 22 11 23 15 26 14 18 18 21 16 19 20 29 26 17 21 24 23 18 29 16 21 28 17 29 25 15 21 25 20 15 16 25 22 20 12
[153] 23 16 23 27 19 18 18 23 24 14 21 27 17 17 16 23 17 26 24 16 13 10 21 13 17 16 14 17 12 20 23 24 19 18 26 24 18 23
[191] 17 23 18 18 25 23 14 19 23 13 21 21 26 19 28 16 22 28 31 22 25 22 25 22 16 16 34 25 27 18 17 17 20 28 21 23 17 13
[229] 22 11 21 21 24 24 21 24 17 19 24 25 21 22 21 18 23 18 24 23 17 23 22 19 18 11 18 21 18 22 16 23 31 23 22 17 26 17
[267] 14  8 19 19 20 27 12 22 16 20 12 25 30 16 20 19 22 27 22 17 19 13 28 19 14 23 28 23 15 21 14 20 21 21 16 13 14 21
[305] 25 18 23 22 21 26 25 23 26 22 23 25 14 20 16 16 15 16 19 22 16 24 21 22 19 18 21 22 22 20 25 21 22 19 18 17 20 25
[343] 18 26 22 22 18 19 11 12 16 24 21 17 21 17 22 17 20 17 16 23 17 22 22 26 23 26 24 14 25 27 20 25 15  9 30 20 17 24
[381] 22 16 23 21 18 19 17 18 17 24 16 18 28 15 17 19 16 23 20 19 18 23 14 21 14 19 25 21 23 18 20 25 15 22 20 23 17 19
[419] 23 16 15 21 32 20 17 15 31 20 24 14 20 27 20 28 20 18 22 15 16 17 22 17 21 22 24 17 18 21 14 20 20 23 15 24 15 16
[457] 15 24 13 25 11 18 21 14 18 29 17 18 17 21 15 18 20 24 21 17 27 18 27 19 17 21 10 21 20 13 19 20 20 18 15 13 16 19
[495] 22 20 24 20 17 20

> result$breaks
  [1] 0.000 0.001 0.002 0.003 0.004 0.005 0.006 0.007 0.008 0.009 0.010 0.011 0.012 0.013 0.014 0.015 0.016 0.017 0.018
 [20] 0.019 0.020 0.021 0.022 0.023 0.024 0.025 0.026 0.027 0.028 0.029 0.030 0.031 0.032 0.033 0.034 0.035 0.036 0.037
 [39] 0.038 0.039 0.040 0.041 0.042 0.043 0.044 0.045 0.046 0.047 0.048 0.049 0.050 0.051 0.052 0.053 0.054 0.055 0.056
 [58] 0.057 0.058 0.059 0.060 0.061 0.062 0.063 0.064 0.065 0.066 0.067 0.068 0.069 0.070 0.071 0.072 0.073 0.074 0.075
 [77] 0.076 0.077 0.078 0.079 0.080 0.081 0.082 0.083 0.084 0.085 0.086 0.087 0.088 0.089 0.090 0.091 0.092 0.093 0.094
 [96] 0.095 0.096 0.097 0.098 0.099 0.100 0.101 0.102 0.103 0.104 0.105 0.106 0.107 0.108 0.109 0.110 0.111 0.112 0.113
[115] 0.114 0.115 0.116 0.117 0.118 0.119 0.120 0.121 0.122 0.123 0.124 0.125 0.126 0.127 0.128 0.129 0.130 0.131 0.132
[134] 0.133 0.134 0.135 0.136 0.137 0.138 0.139 0.140 0.141 0.142 0.143 0.144 0.145 0.146 0.147 0.148 0.149 0.150 0.151
[153] 0.152 0.153 0.154 0.155 0.156 0.157 0.158 0.159 0.160 0.161 0.162 0.163 0.164 0.165 0.166 0.167 0.168 0.169 0.170
[172] 0.171 0.172 0.173 0.174 0.175 0.176 0.177 0.178 0.179 0.180 0.181 0.182 0.183 0.184 0.185 0.186 0.187 0.188 0.189
[191] 0.190 0.191 0.192 0.193 0.194 0.195 0.196 0.197 0.198 0.199 0.200 0.201 0.202 0.203 0.204 0.205 0.206 0.207 0.208
[210] 0.209 0.210 0.211 0.212 0.213 0.214 0.215 0.216 0.217 0.218 0.219 0.220 0.221 0.222 0.223 0.224 0.225 0.226 0.227
[229] 0.228 0.229 0.230 0.231 0.232 0.233 0.234 0.235 0.236 0.237 0.238 0.239 0.240 0.241 0.242 0.243 0.244 0.245 0.246
[248] 0.247 0.248 0.249 0.250 0.251 0.252 0.253 0.254 0.255 0.256 0.257 0.258 0.259 0.260 0.261 0.262 0.263 0.264 0.265
[267] 0.266 0.267 0.268 0.269 0.270 0.271 0.272 0.273 0.274 0.275 0.276 0.277 0.278 0.279 0.280 0.281 0.282 0.283 0.284
[286] 0.285 0.286 0.287 0.288 0.289 0.290 0.291 0.292 0.293 0.294 0.295 0.296 0.297 0.298 0.299 0.300 0.301 0.302 0.303
[305] 0.304 0.305 0.306 0.307 0.308 0.309 0.310 0.311 0.312 0.313 0.314 0.315 0.316 0.317 0.318 0.319 0.320 0.321 0.322
[324] 0.323 0.324 0.325 0.326 0.327 0.328 0.329 0.330 0.331 0.332 0.333 0.334 0.335 0.336 0.337 0.338 0.339 0.340 0.341
[343] 0.342 0.343 0.344 0.345 0.346 0.347 0.348 0.349 0.350 0.351 0.352 0.353 0.354 0.355 0.356 0.357 0.358 0.359 0.360
[362] 0.361 0.362 0.363 0.364 0.365 0.366 0.367 0.368 0.369 0.370 0.371 0.372 0.373 0.374 0.375 0.376 0.377 0.378 0.379
[381] 0.380 0.381 0.382 0.383 0.384 0.385 0.386 0.387 0.388 0.389 0.390 0.391 0.392 0.393 0.394 0.395 0.396 0.397 0.398
[400] 0.399 0.400 0.401 0.402 0.403 0.404 0.405 0.406 0.407 0.408 0.409 0.410 0.411 0.412 0.413 0.414 0.415 0.416 0.417
[419] 0.418 0.419 0.420 0.421 0.422 0.423 0.424 0.425 0.426 0.427 0.428 0.429 0.430 0.431 0.432 0.433 0.434 0.435 0.436
[438] 0.437 0.438 0.439 0.440 0.441 0.442 0.443 0.444 0.445 0.446 0.447 0.448 0.449 0.450 0.451 0.452 0.453 0.454 0.455
[457] 0.456 0.457 0.458 0.459 0.460 0.461 0.462 0.463 0.464 0.465 0.466 0.467 0.468 0.469 0.470 0.471 0.472 0.473 0.474
[476] 0.475 0.476 0.477 0.478 0.479 0.480 0.481 0.482 0.483 0.484 0.485 0.486 0.487 0.488 0.489 0.490 0.491 0.492 0.493
[495] 0.494 0.495 0.496 0.497 0.498 0.499 0.500

CodePudding user response:

One option is to use sapply and between

library(dplyr)
sapply(seq_along(intervals), function(x) {
    sum(between(a, intervals[x], intervals[x 1]))
})
  •  Tags:  
  • r
  • Related