#r #quantile
#r #квантиль
Вопрос:
На самом деле, я решил этот вопрос, но у меня есть проблемы, потому что решение состоит из двух шагов, которые действительно разделены друг от друга (первый шаг находится внутри функции, а второй шаг — внутри другого; это означало бы, что я должен сделать H в качестве вывода).
Во-первых, воспроизводимый пример:
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
Комментарии:
1. Это значение будет отсутствовать, но
findInterval
все равно даст правильный результат для любых числовых значений в интервале[ 23.7,75.9]
. Единственное значение, при котором findInterval давал бы разные результаты, было бы, если бы тестовое значение было на уровне или выше 75,9. Если вам нужно сохранить максимальное значение из сокращений, используйтеonlycuts=TRUE
стратегию.2. Это последнее значение в векторе, возвращаемое
cut2(RN,g=4,onlycuts=TRUE)
3. Вам нужно будет написать еще один вызов gsub, который «стирает» все, вплоть до запятой, а также удаляет завершающий «]», а затем применить
as.numeric
к нему.4.
as.numeric( gsub( ". \,|\]","", tail(levels(H),1) ) )
5. Как меня отблагодарить? Вы должны найти кучу ответов Г. Гротендика, которые включают вопросы с регулярными выражениями, и проголосовать за них. Я изучил регулярное выражение, разбирая и играя с его ответами на Rhelp.