r - 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
解决方案
这是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 日创建
推荐阅读
- testing - 当缺少“Expires:0”标头时,空手道测试遵循 303 虚拟 URL
- server - 我在哪里可以下载 Rational Application Developer (RAD) 7 和 WebSphere Application Server (WAS) 7?
- c++ - 如何将主要参数传递给其他函数?
- docker - 如何使用 Docker golang 客户端包通过 TCP 连接?
- docker - Podman 无法拉取镜像
- database - 1:1 关系,这是个好主意吗?
- c# - 如何确定属性是否为可为空的引用类型?
- node.js - 由于打字稿依赖性,角度无法更新
- python-3.x - 从机器人框架调用 python 编码文件时出现 FileNotFoundError
- php - 服务帐户域范围的委派 - PHP 上的 Google Calendar API v3