Как я могу легко получить среднее значение, медиану, квартили и т. Д., Учитывая количество каждого значения в R? - PullRequest
4 голосов
/ 15 марта 2011

Предположим, у меня есть фрейм данных со столбцом для значений и другим столбцом для числа раз, когда это значение наблюдалось:

x <- data.frame(value=c(1,2,3), count=c(4,2,1))
x
#   value count
# 1     1     4
# 2     2     2
# 3     3     1

Я знаю, что могу получить средневзвешенное значение данных, используя weighted.mean и взвешенную медиану с использованием функции weighted.median, предоставляемой несколькими пакетами (например, limma), но как я могу получить другие взвешенные статистические данные по моим данным, такие как 1-й и 3-й квартили и, возможно, стандартное отклонение?«Расширение» данных с использованием rep не вариант, потому что sum(x$count) составляет около 3 миллиардов (размер человеческого генома).

Ответы [ 4 ]

7 голосов
/ 15 марта 2011

Вы пробовали эти пакеты:

  1. Hmisc - он имеет несколько взвешенных статистик, включая взвешенные квантили

  2. laeken- имеет взвешенные квантили.

1 голос
/ 15 марта 2011

Или попробуйте выполнить обратное преобразование и выполните анализ обычным способом:

dtf <- data.frame(value = 1:3, count = c(4, 2, 1))
x <- with(dtf, rep(value, count))
summary(x)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
  1.000   1.000   1.000   1.571   2.000   3.000 
fivenum(x)
[1] 1 1 1 2 3
0 голосов
/ 12 июля 2015

Для завершения ответа Прасад Халасани , вот код для завершения взвешенной медианы столбец для значений и другой столбец для количества раз, которое наблюдалось это значение. Обратите внимание, что он использует функцию wtd.quantile из пакета Hmisc.

require(Hmisc)

x <- data.frame(value=c(1,2,3), count=c(4,2,1))
##   value count
## 1     1     4
## 2     2     2
## 3     3     1

wtd.quantile(x$value, x$count, probs = 0.5)
## 50% 
##   1 
0 голосов
/ 03 июня 2014

Для полноты отметим, что пакет S4Vectors в Bioconductor предоставляет ответ в виде класса "Rle", который позволяет построить закодированный вектор длины прогона, который поддерживает все обычные операции:

library(S4Vectors)
x <- data.frame(value=c(1,2,3), count=c(4,2,1))
y <- Rle(x$value, x$count)
mean(y)
median(y)
quantile(y)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...