2010-04-15 75 views
9

我有一个数据框,其中包含一列整数,我希望将其用作参考来创建新的分类变量。我想将变量分成三组并自己设置范围(即0-5,6-10等)。我尝试了cut,但是它将变量分成基于正态分布的组,并且我的数据是正确的。我也尝试使用if/then语句,但输出true/false值,我想保留我的原始变量。我相信有一个简单的方法来做到这一点,但我似乎无法弄清楚。任何建议在一个简单的方法来做到这一点很快?根据范围在R中创建分类变量

我脑子里想的是这样的:

x x.range 
3 0-5 
4 0-5 
6 6-10 
12 11-15 

回答

12

伊恩的回答()为做到这一点,据我所知道的最常见的方式。

我更喜欢使用,从

指定分级间隔说法似乎更直观一点给我。

您使用像这样:

# mock some data 
data = sample(0:40, 200, replace=T) 

a = c(0, 5);b = c(5,9);c = c(9, 19);d = c(19, 33);e = c(33, 41) 

my_bins = matrix(rbind(a, b, c, d, e), ncol=2) 

# returns: (the binning intervals i've set) 
     [,1] [,2] 
[1,] 0 5 
[2,] 5 9 
[3,] 9 19 
[4,] 19 33 
[5,] 33 41 

shx = shingle(data, intervals=my_bins) 

#'shx' at the interactive prompt will give you a nice frequency table: 
# Intervals: 
    min max count 
1 0 5 23 
2 5 9 17 
3 9 19 56 
4 19 33 76 
5 33 41 46 
+1

很好的解决方案,如果你懒得设置的最大值和最小值的矩阵。如果你有一个动态范围,这可能是单调乏味的。 – 2011-04-28 09:04:43

+0

@罗曼,我正在想这个。我有一个与动态范围相似的问题。在这种情况下你有什么建议吗? – PikkuKatja 2015-03-12 09:27:46

16
x <- rnorm(100,10,10) 
cut(x,c(-Inf,0,5,6,10,Inf))