如果给出R中每个值的计数,我怎样才能轻松得到均值,中位数,四分位数等?

时间:2011-03-15 02:05:10

标签: r statistics

假设我有一个数据框,其中包含值列和另一列,表示观察到该值的次数:

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),但我怎么能获得我的数据的其他加权统计数据,例如第一和第三四分位数,以及标准差?使用rep“扩展”数据不是一种选择,因为sum(x$count)约为30亿(人类基因组的大小)。

4 个答案:

答案 0 :(得分:7)

你试过这些包吗?

  1. Hmisc - 它有多个加权统计信息,包括加权分位数

  2. laeken - 它有加权分位数。

答案 1 :(得分:1)

或尝试对其进行反向转换,并按常规方式运行分析:

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

答案 2 :(得分:0)

为了完整起见,我会注意到Bioconductor中的S4Vectors包提供了一个答案,其形式为&#34; Rle&#34; class,它允许您构造一个支持所有常规操作的行程编码向量:

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)

答案 3 :(得分:0)

完成answerPrasad Chalasani, 这是完成给定加权中位数的代码 值列 以及观察到该值的次数的另一列。 请注意,它使用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