首页 > 解决方案 > R - 通过值计数识别固定宽度的范围

问题描述

假设有 100 个二进制值的有序集合。使用 10 的窗口大小,我想知道至少包含x 个“1s”(例如x =3)的那些窗口的范围(即开始和结束位置)。

> set.seed(123456789)
> full=rep(0,100)
> full[sample(1:100, 15)]=1
> split(full, ceiling(seq_along(full)/10))
$`1`
 [1] 0 0 0 0 0 1 0 0 0 0

$`2`
 [1] 0 0 1 0 0 0 0 0 0 0

$`3`
 [1] 0 0 1 0 1 0 0 0 0 0

$`4`
 [1] 0 0 0 0 0 0 0 1 0 0

$`5`
 [1] 0 1 0 0 0 0 0 0 1 0

$`6`
 [1] 0 0 0 0 0 0 0 0 0 0

$`7`
 [1] 0 0 0 0 1 0 1 0 0 1

$`8`
 [1] 0 0 0 0 0 1 0 0 0 0

$`9`
 [1] 0 0 0 0 0 1 1 0 1 0

$`10`
 [1] 0 0 0 0 0 0 0 0 0 1

这就是我要找的东西:

> desired_function(full)
61-70
81-90  

标签: rrangebinning

解决方案


这是base R中的一个reprex:

set.seed(123456789)

full <- rep(0,100)
full[sample(1:100, 15)] <- 1
my_list <- split(full, ceiling(seq_along(full)/10))
names(my_list) <- paste(10 * (as.numeric(names(my_list)) - 1) + 1, 
                        10 * (as.numeric(names(my_list)) - 1) + 10,
                        sep = " - ")
names(which(sapply(my_list, function(x) sum(x) == 3)))
#> [1] "21 - 30" "31 - 40"

reprex 包(v0.3.0)于 2020 年 7 月 24 日创建


推荐阅读