问题描述
interval
1 '(-inf-57142.8]'
2 '(57142.8-94002.6]'
3 '(94002.6-130862.4]'
4 '(130862.4-167722.2]'
5 '(167722.2-204582]'
6 '(204582-241441.8]'
7 '(241441.8-278301.6]'
8 '(278301.6-315161.4]'
9 '(315161.4-352021.2]'
10 '(352021.2-inf)'
我想将任何给定的数字映射到间隔“ bins”,使用存储在上面数据框中的间隔并将索引作为bin编号,即
-57142.8将映射到1
-57142.9将映射到2
130862.5将映射到4
352021.2将映射到9
352021.3将映射到10
等
有没有简单的R工具可以帮助实现这一目标?
还是处理间隔存储为字符串的内容?
预先感谢
解决方法
使用gsub和findInterval解决了此问题,这可能对其他人有用吗?
从上面原始问题中描述的字符串获取边界:
boundaries<-gsub("\\(-inf-|\\(-inf-|\\(\\d+[.]*\\d+[-]+|\\'|\\]","",intervals$interval)[1:9] %>% as.numeric()
获取间隔位置:
findInterval(value_to_test,boundaries[1:9],rightmost.closed = FALSE,all.inside = TRUE)
特殊情况下分别处理端点'(-inf-57142.8)'和'(352021.2-inf)',如果value_to_test落在边界上,则其Interval位置也是一种特殊情况,并以-1进行调整。