从环路到R的连续到离散切割四分位数

时间:2015-06-11 16:25:42

标签: r loops for-loop cut quartile

我正在尝试创建一堆基于多列的四分位切割的列。例如,

dataset[,412:422] <- NA

for( i in 50:60){
for(j in 412:422){
     dataset[,j] <- cut(dataset[,i], 
                                      breaks=unique(quantile(dataset[,i],probs=seq(.1,1,by=.1),na.rm=T)), 
                                      include.lowest=TRUE)
    } 
}

我想基于从第50列到第60列的连续变量的分箱创建新的列412到422.当我尝试执行上述代码时,我回来的是

   V412    V413    V414    V415    V416    V417    V418    V419 V420    V421    V422
(56,64] (56,64] (56,64] (56,64] (56,64] (56,64] (56,64] (56,64] (56,64] (56,64] (56,64]
 <NA>    <NA>    <NA>    <NA>    <NA>    <NA>    <NA>    <NA>  <NA>    <NA>    <NA>


......

<NA>    <NA>    <NA>    <NA>    <NA>    <NA>    <NA>    <NA> <NA>    <NA>    <NA>

我不确定我哪里出错了。任何帮助将不胜感激!!!

1 个答案:

答案 0 :(得分:0)

这个问题更多的是关于组织和整洁的数据。有很多方法可以做到这一点。

我建议将想要分组的数据分离到自己的data.frame中。

x=dataset[, 50:60]

然后通过使用您想要的参数创建一个函数并使用apply

将这些列分成新列

功能:

mycut=function(x)  cut(x, 
                       breaks=unique(quantile(x,probs=seq(.1,1,by=.1),na.rm=T)), 
                       include.lowest=TRUE)

适用:

xbin=apply(x,2,mycut)

然后将xbin放回数据集并适当地命名。