首页 > 解决方案 > 计算特定元素是否在给定范围内?

问题描述

我有一个由长度为 10 的列表组成的向量。我还有两个其他向量存储它们的下分位数和上分位数。有没有办法提取每个 10 个列表的分位数之间的数据?

基本上我想看看其中有多少有一个特定的数字。

sims 是带有数据的向量

到目前为止,我已经尝试使用 %in% (note-sims 是带有列表的向量))

 for (i in 1:100){
  a <- 80.0  %in% sims[[i]]
 }

我打算计算其中有多少是真的,然后计算它们,但这只会返回 false 并且也不保证它是否在范围内。

有没有比通过提取相关数据对每个列表进行排序然后检查它是否具有价值更简单的方法?

标签: rstatistics

解决方案


由于您没有提供示例数据集,因此这里是基于我生成的一些示例数据的可重现示例

set.seed(2018)
lst <- replicate(4, sample(10), simplify = FALSE)
qrt <- lapply(lst, quantile, probs = c(0.25, 0.75))

在这里,我为每个vectorin生成了 25% 和 75% 的分位数list;结果是 alist具有与 一样多的元素list

我们现在可以使用仅从分位数范围内Map的元素中选择那些条目list

Map(function(x, y) x[x >= y[1] & x <= y[2]], lst, qrt)
#[[1]]
#[1] 4 5 7 6
#
#[[2]]
#[1] 4 6 5 7
#
#[[3]]
#[1] 6 5 4 7
#
#[[4]]
#[1] 4 7 6 5

计算分位数范围内的元素数

Map(function(x, y) sum(x >= y[1] & x <= y[2]), lst, qrt)
#[[1]]
#[1] 4
#
#[[2]]
#[1] 4
#
#[[3]]
#[1] 4
#
#[[4]]
#[1] 4

推荐阅读