我有一个由长度为10的列表组成的向量。 我还有另外两个向量存储其较低和较高的分位数。 有没有一种方法可以提取每10个列表的分位数之间的数据?
基本上,我希望看到其中有多少具有特定编号。
sims是带有数据的向量
到目前为止,我已经尝试使用%in%(注意,sims是带有列表的向量)
for (i in 1:100){
a <- 80.0 %in% sims[[i]]
}
我要计算其中有多少是真实的,然后再计算它们,但是,这只会返回false,也不能保证它是否在范围内。
是否有比通过提取相关数据然后检查其是否具有值的方式对每个列表进行排序更简单的方法?
答案 0 :(得分:0)
由于您未提供示例数据集,因此,这是基于我生成的一些示例数据的可重现示例
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