【问题标题】:R Quantiles of matrix - wrong outputR矩阵的分位数 - 错误的输出
【发布时间】:2021-06-07 06:53:18
【问题描述】:

我可能在这里犯了一些简单的错误,但我有一个矩阵,我想产生整个矩阵的分位数。我试过这个:

quantile(unlist(ricepm), probs = c(.25, .5, .75))

但这给了我错误的输出(全为 1)

25% 50% 75% 
  1   1   1 

dput(head(ricepm[, c(5, 5)])) 我的数据样本

structure(
    list(
        Antigua.and.Barbuda = 
            structure(c(1L, 1L, 1L, 1L, 1L, 24L), 
                .Label = 
                    c("0", "0,001255087", "0,001351049", "0,002179536", 
                    "0,002322295", "0,00352192", "0,003639649", "0,005203948", "0,005613623", 
                    "0,005899437", "0,0063163", "0,008692968", "0,010768326", "0,01815333", 
                    "0,022817923", "0,05455008", "0,076043772", "0,761972864", "1,167911482", 
                    "11,39171454", "17,55057703", "2,827338354", "3,180646314", "3,18612071", 
                    "3,519189594", "376,5666716", "4,22468796", "5,861801198", "572,3941286", 
                    "76,13680349"
                    ), 
                class = "factor"
            ), 
            Antigua.and.Barbuda.1 = 
                structure(
                    c(1L, 1L, 1L, 1L, 1L, 24L),
                    .Label = 
                        c("0", "0,001255087", "0,001351049", 
                        "0,002179536", "0,002322295", "0,00352192", "0,003639649", "0,005203948", 
                        "0,005613623", "0,005899437", "0,0063163", "0,008692968", "0,010768326", 
                        "0,01815333", "0,022817923", "0,05455008", "0,076043772", "0,761972864", 
                        "1,167911482", "11,39171454", "17,55057703", "2,827338354", "3,180646314", 
                        "3,18612071", "3,519189594", "376,5666716", "4,22468796", "5,861801198", 
                        "572,3941286", "76,13680349"
                        ), 
                    class = "factor"
                )
        ), 
    row.names = 
        c("Afghanistan","Albania", "Algeria", "Angola", "Antigua and Barbuda", "Argentina"), 
    class = "data.frame"
)

【问题讨论】:

  • 对于共享的示例,它给出了所有 0,因为这是正确答案。您需要使用更高的prob 值来获得非零值。例如,quantile(Z, 0.9) 给你一个非零值。
  • 您的数据似乎不是数字而是因子。如果要对它们使用分位数,则需要将它们转换为数字,预先用点替换逗号。 This post on how to convert a factor to numeric 可能会有所帮助
  • @Cath 谢谢!运行它似乎可行,但我现在得到的输出只有 0。计算分位数时是否需要告诉 R 排除矩阵中的零?
  • 您的数据似乎包含很多零,可能超过 75%,因此分位数值...
  • 抱歉,我不确定我是否得到了正确的结果,因为该函数在计算分位数时似乎包含 0。关于如何计算除 0 以外的分位数的任何提示?

标签: r matrix output quantile


【解决方案1】:

如果您只想将矩阵 Z 的所有值放入向量中并从中获取分位数,您可以执行以下操作:

# Put values inside vector
Z_vec = as.vector(Z)

# Compute quantiles
 quantile(Z_vec, probs = c(.25, .5, .75))

【讨论】:

  • 谢谢!我在我的真实数据(一个大矩阵)上尝试了这个,但它给了我以下错误:Error in [.data.frame(x, order(x, na.last = na.last, decreasing = decreasing)) : undefined columns selected
  • quantile() 函数需要一个向量作为参数。尝试将您的数据框转换为矩阵,然后转换为向量,并将其作为参数传递。查看此answer
  • 我明白了,虽然这样做给了我Error in (1 - h) * qs[i] : non-numeric argument to binary operator,也许是因为它是一个字符向量?但是当我尝试将其转换为数字时,整个矩阵都充满了 NA 和 0,我得到 Warning message: NAs introduced by coercion...
  • 您能分享您的数据或其他输出示例吗?见this post
  • 我在上面添加了一个新的例子
猜你喜欢
  • 2010-12-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-21
相关资源
最近更新 更多