在r中创建一个binning变量以打开数据?

时间:2015-01-09 23:05:50

标签: r

我想创建一个变量,根据binwidth

从另一个变量中存储值

如果我想根据计数创建一个bin变量,那么数据看起来就像这样:

1 to 5 = 1
6 to 10 = 2
11 to 15 = 3

enter image description here

没有手动重新编码每个bin是否有一个函数可以在R?

中执行类似的操作

4 个答案:

答案 0 :(得分:2)

由于您希望获得数字而非结果因素,请尝试trunc((mydata$count-1)/5)+1

之类的内容

e.g。

mydata$bucket = trunc((mydata$count-1)/5)+1 

还有ceiling功能,这有点简单:

mydata$bucket = ceiling(mydata$count/5)

请参阅?round

关于你的数据:

mydata = data.frame(spend=c(21,32,34,43,36,39,33,47,47,47,25,50,44,44) ,
                    count=c(3L,1L,2L,15L,1L,8L,1L,11L,15L,11L,3L,12L,11L,4L) )
mydata$bucket = ceiling(mydata$count/5)

给出了:

> mydata
   spend count bucket
1     21     3      1
2     32     1      1
3     34     2      1
4     43    15      3
5     36     1      1
6     39     8      2
7     33     1      1
8     47    11      3
9     47    15      3
10    47    11      3
11    25     3      1
12    50    12      3
13    44    11      3
14    44     4      1

答案 1 :(得分:1)

是的,它被称为切割功能    ?切割

答案 2 :(得分:1)

您可以使用通用cut()函数。对于数字向量x,该方法具有以下参数:

> args(cut.default)
function (x, breaks, labels = NULL, include.lowest = FALSE, right = TRUE,
    dig.lab = 3L, ordered_result = FALSE, ...)    

论证breaks在这里是核心。 要么要么,要么定义间隔的“断点”向量。请注意,所有区间默认为右开(right = TRUE),因此通过创建对象x,包含1到100之间的数字并定义断点向量( brk){1,20,50,100},您将获得这些结果(在结果上使用table()后):

> x <- 1:100
> brk <- c(1,20,50,100)
> table(cut(x = x, breaks = brk))

  (1,20]  (20,50] (50,100]
      19       30       50

你可以看到第一个区间是$(1,\,20)$,所以1不是它的一部分,第一个观察将成为缺失值NA(因为定义之外的所有其他观察间隔)。 通过设置include.lowest = TRUE,R包含最低值(即第一个间隔将被关闭),所以我认为这将产生你想要的东西:

> x <- 1:100
> brk <- c(1,20,50,100)
> table(cut(x = x, breaks = brk, include.lowest = TRUE))

  [1,20]  (20,50] (50,100]
      20       30       50

参数right会反转整个过程,因此默认情况下会间隔打开,而include.lowest会关闭最后间隔(即包含最高最后一类中的值。)

由于生成的对象属于类"factor",您可以考虑将ordered_result设置为TRUE,生成有序因子对象(类"ordered"和{{1} })。 标签等是可选的(参见"factor")。

答案 3 :(得分:0)

cut函数实际上可以实现对变量进行分箱,同时将其保持为连续变量,只需使用labels参数:

myData$bucket <- cut(myData$counts, breaks = 30, labels = rep(1:30))