我有一个由长度为10的列表组成的向量。我有两个其他向量存储它们的低分位数和高分位数。有没有办法在每个10列表的分位数之间提取数据?
基本上我希望看到其中有多少具有特定的数字。
sims是带有数据的向量
到目前为止,我已经尝试使用%in%(注意 - sims是带列表的向量))
for (i in 1:100){
a <- 80.0 %in% sims[[i]]
}
我将计算其中有多少是真的然后计算它们,但这只返回false并且也不保证它是否在范围内。
有没有比通过提取相关数据然后检查它是否具有值来对每个列表进行排序更简单的方法?
由于此处未提供样本数据集,因此基于我生成的一些样本数据,这是一个可重现的示例
set.seed(2018)
lst <- replicate(4, sample(10), simplify = FALSE)
qrt <- lapply(lst, quantile, probs = c(0.25, 0.75))
在这里,我为vector
中的每个list
生成了25%和75%的分位数;结果是list
与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