2016-02-20 3 views
1

У меня есть переменная фактор, созданный с cut:Распределите данные по уровням производства разреза (R)

mycuts=cut(c(1,2,3,4,5,6,7,8),breaks = 3) 
mycuts 
[1] (0.993,3.33] (0.993,3.33] (0.993,3.33] (3.33,5.67] (3.33,5.67] 
[6] (5.67,8.01] (5.67,8.01] (5.67,8.01] 
Levels: (0.993,3.33] (3.33,5.67] (5.67,8.01] 

Теперь я хочу распространять вектор otherdata с той же периодичностью, как cut сделал.

otherdata=c(4,8) 

Нового cut всегда для otherdata имеет уровни, отличные от этого data есть, и я могу установить только этикетку.

Итак, я попытался

factor(otherdata,levels=levels(mycuts)) 

[1] <NA> <NA> 
Levels: (0.993,3.33] (3.33,5.67] (5.67,8.01] 

Но это не работает.

желаемое поведение (обн на комментарий):

[1] (3.33,5.67] (5.67,8.01] Уровни: (0.993,3.33] (3.33,5.67] (5,67, 8,01]

ответ

1
# breaks vector obtained in a way suggested in ?cut 
breaks <- unique(as.numeric(c(sub("\\((.+),.*", "\\1", mycuts), 
           sub("[^,]*,([^]]*)\\]", "\\1", mycuts)))) 
cut(c(4, 8), breaks = breaks) 
# [1] (3.33,5.67] (5.67,8.01] 
# Levels: (0.993,3.33] (3.33,5.67] (5.67,8.01] 
+0

Нет 'labs' объект, определенный –

+0

@John_ Запад, исправлено. – Julius

+1

Я принимаю ваш ответ, потому что он определенно спрашивает! Интервалы 'cut' по умолчанию не согласуются с значениями min/max, поэтому я предпочту включить в include include.lowest = TRUE. –

0

Просто сохраните перерывы в значение и использовать их:.

data=c(1,2,3,4,5,6,7,8) 
mn=min(data) 
mx=max(data) 
d=(mx-mn)/3 
br=seq(from=mn,to=mx,by=d) 
mycuts=cut(data,breaks = br, include.lowest=TRUE) 
otherdata=c(4,8) 
cut(otherdata,breaks = br, include.lowest=TRUE) 

 Смежные вопросы

  • Нет связанных вопросов^_^