Процентиль от бинов распределений - PullRequest
2 голосов
/ 31 августа 2011

Мне нужно найти «самый высокий контейнер для 90% образцов».

У меня есть такая таблица:

my_table <- data.frame(matrix(c(122,68,2,0,30,0,0,0,5,79,23,9000), byrow=TRUE, ncol=4))
names(my_table) <- c("0-10","11-20","21-30","31-5000")

Где заголовки бинов указывают минуты (время).

Для первого ряда 90% выборок с интервалами ниже или равными «11-20». То есть 90% образцов имеют время короче 21 минуты.

Для второго ряда он меньше или равен интервалу "0-10".

А для третьего ряда он меньше или равен интервалу "31-5000".

Я хотел бы добавить столбец «интервал 90p», в котором вышеуказанные интервалы будут найдены автоматически, в результате получится следующая таблица:

my_table$Perc90 <-  c("11-20","0-10","31-5000")

Моя настоящая таблица насчитывает тысячи и тысячи строк.

Если кто-то может помочь, я очень благодарен, а также спасибо всем, кто внес свой вклад в этот фантастический сайт!

/ Chris

Ответы [ 2 ]

0 голосов
/ 31 августа 2011
apply(my_table, 1, function(x) names(x)[
               max( which( c(0,cumsum(x)) < 0.9*sum(x)))
                                      ])
# [1] "11-20"   "0-10"    "31-5000"
0 голосов
/ 31 августа 2011

Непонятно, как вы хотите, чтобы 90-процентное ограничение определялось по вашему ответу, когда он не точный, поэтому я предоставил ответ, который даст вам нечто, соответствующее вашему примеру.Это гарантирует, что выбранное отсечение составляет не менее 90%.

my_table$Perc90 <- apply(my_table, 1, function(x) {
    pct <- cumsum(x)/sum(x)
    return(names(x[pct >= 0.9][1]))
    }  )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...