根据范围在R中创建分类变量

Ste*_*edy 9 r r-faq

我有一个带有整数列的数据框,我想用它作为参考来创建一个新的分类变量.我想将变量分成三组并自己设置范围(即0-5,6-10等).我试过cut但是根据正态分布将变量分成组,我的数据是正确的.我也尝试使用if/then语句,但这会输出一个真/假值,我想保留原始变量.我确信有一种简单的方法可以做到这一点,但我似乎无法弄明白.有关简单方法的任何建议吗?

我有这样的想法:

x   x.range
3   0-5
4   0-5
6   6-10
12  11-15
Run Code Online (Sandbox Code Playgroud)

Ian*_*ows 17

x <- rnorm(100,10,10)
cut(x,c(-Inf,0,5,6,10,Inf))
Run Code Online (Sandbox Code Playgroud)


dou*_*oug 12

据我所知,Ian的答案(剪辑)是最常见的做法.

我喜欢用木瓦,从格子

指定分箱间隔的参数对我来说似乎更直观一些.

你像这样使用木瓦:

# 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
Run Code Online (Sandbox Code Playgroud)