【问题标题】:Create a table of Quantiles in R for multiple Subsets of Data在 R 中为多个数据子集创建分位数表
【发布时间】:2012-07-06 21:12:32
【问题描述】:

我正在尝试在 R 中为多个数据子集创建一个分位数表。

现在,我在表 DATA 中有一个 id 向量 (p_ids),它们不是连续的。对于p_ids 中的每个值,我希望列出分位数。

到目前为止,我已经尝试过以下变体:

i <- 1
n <- 1

for (i in p_ids) {
    while(n <= nrow(data)) {
        quantiles[n] <- quantile(subset(alldata$variableA, alldata$variableB == i),
                                 probs = c(0,1,2,3)/3)
        n <- n + 1
    }
}

我知道我的问题出在索引的某个地方,但我似乎无法找到索引应该去哪里。有什么建议吗?

【问题讨论】:

    标签: r indexing


    【解决方案1】:

    您应该考虑使用聚合来为您做分位数 http://stat.ethz.ch/R-manual/R-devel/library/stats/html/aggregate.html

    设置 FUN=quantiles 和 by=p_ids 应该可以满足您的需求。

    除非我误解了你的问题。

    【讨论】:

    • 感谢您的帮助。我认为聚合函数会为我节省很多时间。我已经做了进一步的研究,但似乎不断收到一个错误,即“by”必须是一个列表。我尝试同时使用值和数据框。我的代码是:aggregate(x = mydata$q1, by = p_ids, fun = median) 现在,要生成 p_ids 的“列表”,我正在使用唯一函数 -- p_ids
    • 还意识到如果我使用 list(),我会处理这个问题,但最终会得到参数必须具有相同长度的错误消息。(代码是:聚合(x = mydata$q1, by = list(p_ids), fun = median)。
    • 终于想通了。如果您也是 R 新手:聚合(x = mydata,by = list(mydata$v1),fun = median)。在此之下,mydata 必须是一个数据框,其中所有因子都是数字的(因此可以计算中位数),然后 mydata$v1 是您希望将项目分组的向量——对我来说,这就是字段 p_id。 !
    【解决方案2】:

    看看cut()。例如:

    q <- cut(p_ids, 2) 
    data.frame(P_id = p_ids, Bin = q)
    

    cut() 的第二个参数是你想要多少个 bin。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-10-06
      • 2021-12-20
      • 2016-07-10
      • 1970-01-01
      • 2014-12-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多