2016-10-10 4 views
0

На самом деле, я решил этот вопрос, но у меня проблемы, потому что решение состоит из двух шагов, которые действительно разделены между собой (первый шаг внутри функции, а второй шаг внутри другого, это подразумевает, что я должен делать H в качестве вывода).Получите интервал cut2 для номеров, которые ранее не были включены

Во-первых, воспроизводимой пример:

RN = rnorm(n=1000,10,20) 
H = cut2(RN,g=4,onlycuts=FALSE) # Step 1: The intervals are generated 
H2= cut2(RN,g=4,onlycuts=TRUE) # Step 1: (This would be useful if Step 1 and 2 were not separated) 
new_number = 10.53 # Step 2: New number 
interval_new_number = cut2(new_number,cuts=H) # Step 2: Interval for new number 

Я хотел бы знать решение, которое может быть сделано, как:

new_number %in% H 

Дайте мне ваше мнение.

ответ

1

Я (думаю) запрос предназначен для определения номера интервала для нового значения относительно вектора факторов, построенного с помощью cut2. Если это то, что необходимо затем использовать as.numeric на GSUB строительство первого из двух разрезов на каждом уровне фактора:

H = cut2(RN,g=4,onlycuts=FALSE) 
attributes(H) 
#---- 
$class 
[1] "factor" 

$levels 
[1] "[-66.7,-2.4)" "[ -2.4,10.3)" "[ 10.3,23.7)" "[ 23.7,75.9]" 

findInterval(10.53, as.numeric(gsub("\\[|\\,.+$","", levels(H)))) 
[1] 3 

Я никогда не видел параметр onlycuts использовал раньше, но было бы сделать код еще проще, поскольку звонки as.numeric(gsub(...)) не нужны:

> (H2 = cut2(RN,g=4,onlycuts=TRUE)) 
[1] -66.687208 -2.397688 10.334926 23.659386 75.887076 
> findInterval(10.53, H2) 
[1] 3 
+0

Спасибо! Я искал это –

+0

Не такая большая ошибка, но результат не тот же: , если я использую as.numeric (gsub (...)) Я получаю c (-66.687208, -2.397688, 10.334926, 23.659386) У меня пропало 75.887076. Я решил это, но мне нужно было посоветовать вам об этом. –

+1

Это значение будет отсутствовать, но 'findInterval' все равно даст правильный результат для любых числовых значений в интервале' [23.7,75.9] '. Единственное значение, при котором findInterval даст разные результаты, будет тогда, когда тестовое значение было выше или выше 75.9. Если вам нужно сохранить максимальное значение из разрезов, используйте стратегию 'onlycuts = TRUE'. –