2015-02-09 2 views
0

Мне нужно выделить отдельные наблюдения из объекта плотности в R. Это связано с prior post, за исключением того, что мои данные отформатированы по-разному.Выберите конкретные столбцы объекта плотности в R

Я начинаю с матрицы значений выражения гена «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», чьи плотности находятся ниже горизонтальной линии в «Ь [1] = 0,5»?

ответ

1

Если вы хотите получить расчетную плотность с определенным значением, вы можете использовать approx вместе с точками от объекта плотности. Например

yv <- sapply(d, function(d) { 
    approx(d$x, d$y, .5)[["y"]] 
}) 
yv 
# [1] 0.7158584 0.5516512 0.7049119 0.6180026 ... 

Это позволит прогнозировать xvalue при х = .5 для каждого из плотностей 10. Для того, чтобы увидеть, какие из них находятся ниже горизонтальной линии, вы можете сделать

which(yv<.5) 
# [1] 5 # (your results may differ due to the random input) 

Итак, мы видим только 5-й столбец соответствует критериям.

+0

... и для тех, кто хочет покрасить код: 'color = rep (1, length (d)); цвет [который (yv <.5)] = 2; plot (b, type = "n", ylim = c (0,1)); для (i в 1:10) {lines (d [[i]], col = c ("серый", "красный") [цвет [i]]}; abline (h = 0,5) ' – Rnoob

Смежные вопросы