r - 通过R中的迭代计算向量范围内的事件
问题描述
我有一个包含事件标记样本数的向量。它们仅在发现事件时列出,而不是在每个样本中列出。我想获得每秒发现的事件数的输出。采样率是已知的(15hz)。
我想出了如何使用 for 循环来做到这一点,但它的工作速度有点慢。我正在努力找出一种更有效的方法来执行此计算(可能使用 mapply 或类似的东西?)。有人有什么建议吗?
这是我正在做的一个示例:
vec <- c(9,20,23,48,50,51)
fs <- 15
start_idx <- seq(from=1,to=46,by=15)
end_idx <- seq(from=15,to=60,by=15)
counter <- vector()
for (i in 1:length(start_idx)) {
counter[i] <- length(which(vec >= start_idx[i] & vec <= end_idx[i]))
}
计数器的结果应该是:
> counter
[1] 1 2 0 3
任何帮助深表感谢!
解决方案
对于 tidyverse 方法,您可以map
在里面mutate
:
library(tidyverse)
ranges <- tibble(start_idx, end_idx)
ranges %>%
mutate(ct = map2_int(start_idx, end_idx, ~sum(.x <= vec & .y >= vec)))
start_idx end_idx ct
<dbl> <dbl> <int>
1 1 15 1
2 16 30 2
3 31 45 0
4 46 60 3
推荐阅读
- javascript - 以 html 帖子形式存储重置密码令牌是否安全?
- sql - 选择一个Id每天的最新记录 - Oracle pl sql
- python - Python Pandas 数据框中的行排序/计数
- firebase - 有没有办法让三元运算符适用于 Cloud Firestore 安全规则?
- java - 如何在打开另一个 JFrame 时禁用 JFrame
- javascript - 在集合 Div 中创建 Mosiac 图像库
- c# - 通过完全限定的对象名称而不是字符串访问资源
- ruby-on-rails - 此 Ruby 代码是否正确使用线程、线程池和并发性
- javascript - Vuejs:将 SAVE 函数传递给 CRUD 组件
- html - 字体显示不正确