【问题标题】:How can I easily get the mean, median ,quartiles, etc. given counts of each value in R?给定 R 中每个值的计数,如何轻松获得平均值、中位数、四分位数等?
【发布时间】:2011-03-15 02:05:09
【问题描述】:

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

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 获得数据的加权平均值,并使用多个软件包(例如 limma)提供的 weighted.median 函数获得加权中位数,但我如何才能获得其他加权统计信息数据,例如第一和第三四分位数,也许还有标准差?使用rep“扩展”数据不是一种选择,因为sum(x$count) 大约有 30 亿(人类基因组的大小)。

【问题讨论】:

    标签: r statistics


    【解决方案1】:

    你试过这些包吗:

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

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

    【讨论】:

    • Hmisc 似乎具有我需要的所有功能。谢谢。
    【解决方案2】:

    或者尝试对其进行反向转换,并以通常的方式运行分析:

    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
    

    【讨论】:

    • 我在问题中说总数超过30亿,太大了,不能这样做。
    【解决方案3】:

    完成answer 通过Prasad Chalasani, 这是完成给定加权中位数的代码 值列 另一列是观察该值的次数。 请注意,它使用 Hmisc 包中的 wtd.quantile 函数。

    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 
    

    【讨论】:

      【解决方案4】:

      为了完整起见,我会注意到 Bioconductor 中的 S4Vectors 包以“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)
      

      【讨论】:

        猜你喜欢
        • 2019-02-26
        • 1970-01-01
        • 2011-10-23
        • 2023-01-20
        • 2016-08-01
        • 1970-01-01
        • 1970-01-01
        • 2013-11-05
        • 2014-10-01
        相关资源
        最近更新 更多