首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >有没有更好的方法在R中创建分位数“虚拟”/因子?

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

Stack Overflow用户
提问于 2010-10-22 23:39:42
回答 2查看 3.3K关注 0票数 8

我想分配代表分位数的因子。因此,我需要它们是数字的。这就是为什么我写了下面的函数,它基本上就是我问题的答案:

代码语言:javascript
复制
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包),但至少根据我得到的参数,我最终只得到了那些不方便的(?-至少对我来说)阈值。

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-10-23 08:48:06

对于基数R,使用分位数计算出拆分,然后剪切以将数值变量转换为离散变量:

代码语言:javascript
复制
qcut <- function(x, n) {
  cut(x, quantile(x, seq(0, 1, length = n + 1)), labels = seq_len(n),
    include.lowest = TRUE)
}

或者,如果你只是想要数字:

代码语言:javascript
复制
qcut2 <- function(x, n) {
  findInterval(x, quantile(x, seq(0, 1, length = n + 1)), all.inside = T)
}
票数 13
EN

Stack Overflow用户

发布于 2010-10-23 00:24:26

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

代码语言:javascript
复制
qdum <- function(v, q) {
 library(Hmisc)
 quantilenum <- cut2(v, g=q)
 levels(quantilenum) <- 1:q
 cbind(v, quantilenum)
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3998469

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档