我需要从R中的密度对象中选择单独的观察结果。这与prior post有关,除了我的数据格式不同。
我从一个基因表达值矩阵“b”开始,其中列表示10个观察值,行表示1000个基因的表达水平。
b = matrix(rexp(1000),ncol=10)
接下来,我将每次观察的密度绘制成一条单独的线。
d = apply(b, 2, density, na.rm = TRUE)
plot(b, type="n", ylim=c(0,1))
for (i in 1:10) { lines( d[[i]] ) }
abline(h=0.5)
如何挑选'b'中密度低于'b [,1] = 0.5'水平线的列?
答案 0 :(得分:1)
如果要获得特定值的估计密度,可以使用approx
以及密度对象中的点。例如
yv <- sapply(d, function(d) {
approx(d$x, d$y, .5)[["y"]]
})
yv
# [1] 0.7158584 0.5516512 0.7049119 0.6180026 ...
这将预测每个密度10的x = .5的x值。要查看哪些密度低于水平线,你可以做
which(yv<.5)
# [1] 5 # (your results may differ due to the random input)
所以我们看到只有第5列符合标准。