2010-04-15 3 views
9

У меня есть dataframe с столбцом целых чисел, который я хотел бы использовать в качестве ссылки для создания новой категориальной переменной. Я хочу разделить переменную на три группы и задать диапазоны (т.е. 0-5, 6-10 и т. Д.). Я попробовал cut, но это делит переменную на группы на основе нормального распределения, и мои данные искажены. Я также пытался использовать if/then statements, но это выводит значение true/false, и я бы хотел сохранить мою исходную переменную. Я уверен, что есть простой способ сделать это, но я не могу понять это. Любой совет по простому способу сделать это быстро?Создать категориальную переменную в R на основе диапазона

я имел в виду что-то вроде этого:

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

ответ

12

ответ Яна (вырезать) является наиболее распространенным способом сделать это, насколько я знаю.

Я предпочитаю использовать гальку, из Lattice Пакет

аргумент, который определяет интервалы биннинговые кажется немного более понятным для меня.

использовать гальку так:

# 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

Nice решение, если вы потрудились создать матрицу минимального и максимального значений. Это может быть утомительным, если у вас есть динамический диапазон. –

+0

@ Роман, я точно думал об этом. У меня есть аналогичная проблема с динамическими диапазонами. У вас есть предложения, как действовать в этом случае? – PikkuKatja

16
x <- rnorm(100,10,10) 
cut(x,c(-Inf,0,5,6,10,Inf)) 
Смежные вопросы