有没有更好的方法在 R 中创建分位数“虚拟”/因子?

Posted

技术标签:

【中文标题】有没有更好的方法在 R 中创建分位数“虚拟”/因子?【英文标题】:Is there a better way to create quantile "dummies" / factors in R? 【发布时间】:2011-04-29 05:56:40 【问题描述】:

我想指定代表分位数的因子。因此我需要它们是数字的。 这就是我编写以下函数的原因,这基本上是我问题的答案:

qdum <- function(v,q)

qd = quantile(v,1:(q)/q)
v = as.data.frame(v)
v$b = 0
names(v) <- c("a","b")
i=1
for (i in 1:q)

    if(i == 1)
        v$b[ v$a < qd[1]] = 1
    else
        v$b[v$a > qd[i-1] & v$a <= qd[i]] = i


all = list(qd,v)
return(all)

    

你现在可以笑了:)。 返回的列表包含一个变量,该变量可用于将每个观察值分配给其相应的分位数。我现在的问题是:有没有更好的方法(更“原生”或“核心”)来做到这一点?我知道 quantcut(来自 gtools 包),但至少根据我得到的参数,我最终只得到了那些不方便的(? - 至少对我而言)阈值。

感谢任何有助于变得更好的反馈!

【问题讨论】:

【参考方案1】:

使用基数 R,使用分位数计算拆分,然后通过 cut 将数值变量转换为离散变量:

qcut <- function(x, n) 
  cut(x, quantile(x, seq(0, 1, length = n + 1)), labels = seq_len(n),
    include.lowest = TRUE)

或者如果你只想要数字:

qcut2 <- function(x, n) 
  findInterval(x, quantile(x, seq(0, 1, length = n + 1)), all.inside = T)

【讨论】:

看起来哈德利正在努力提高他的击键次数,每个接受的答案比率...【参考方案2】:

我不确定 quantcut 是什么,但我会执行以下操作

qdum <- function(v, q) 
 library(Hmisc)
 quantilenum <- cut2(v, g=q)
 levels(quantilenum) <- 1:q
 cbind(v, quantilenum)

【讨论】:

不错的答案。基本上 quantcut 与 quantcut 完全相同。不同之处在于将级别替换为 1:q。我不知道这是可能的。谢谢萨米尔!

以上是关于有没有更好的方法在 R 中创建分位数“虚拟”/因子?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Django 中创建分页?

在 Spring Data JPA 中创建分页

在 Spark 中创建分箱直方图

插入表格会在 s-s-rS 报告中创建分页符

php 在CodeIgniter App中创建分页功能。在CodeIgniter中学习如何为分页创建模型,控制器和视图:https://www.cl

在R中创建“数据透视表”,每行填充因子值