Как я получаю стоимость интервалов, реализованных с cut?

Привет в настоящее время у меня есть серия данных, и я представляю с таблицей частот, разделенной из-за intérvalos, что являются следующими:

intérvalos были вычислены с:

cut(datos, nclass.Sturges(datos))

(4.95,14] (14,23] (23,32] (32,41] (41,50] (50,59.1]

Случай состоит в том, что я хочу вычислить средний показатель и моду и следовательно нуждаюсь в нижнем пределе, а следовательно он хотел знать, как он мог бы вмещаться например стоимости (14, 23] 14.

Спасибо.

2
задан 13.10.2016, 01:04
3 ответа

Возможное решение:

  1. Сохранять данные, распределенные по категориям в новой переменной

    datosc <- cut(datos, nclass.Sturges(datos))
    
  2. Получать уровни полученного фактора

    lvls <- levels(datosc)
    
  3. Потом с функцией strsplit, разделять каждый текст ('(41,50]') из-за запятой

    cortes <- strsplit(lvls, ",")
    
  4. Предыдущее возвращает список, где каждый элемент - вектор две стоимость, а следовательно мы нуждаемся в первом элементе каждого вектора, для этого мы используем функцию lapply чтобы применять функцию head в каждый элемент списка с параметром 1

    primerel <- lapply(cortes, head, 1)
    
  5. Предыдущую стоимость мы достаем первую скобку

    primerel <- gsub("\\(", "", primerel)
    
  6. В конце концов мы это вынуждаем в числовую стоимость

    primerel <- as.numeric(primerel)
    

Пример

> datos <- rnorm(10)
> 
> datosc <- cut(datos, nclass.Sturges(datos))
> 
> lvls <- levels(datosc)
> lvls
[1] "(-1.33,-0.934]"  "(-0.934,-0.536]" "(-0.536,-0.138]" "(-0.138,0.26]"       "(0.26,0.66]"    
> 
> cortes <- strsplit(lvls, ",")
> cortes
[[1]]
[1] "(-1.33"  "-0.934]"

[[2]]
[1] "(-0.934" "-0.536]"

[[3]]
[1] "(-0.536" "-0.138]"

[[4]]
[1] "(-0.138" "0.26]"  

[[5]]
[1] "(0.26" "0.66]"

> 
> primerel <- lapply(cortes, head, 1)
> primerel
[[1]]
[1] "(-1.33"

[[2]]
[1] "(-0.934"

[[3]]
[1] "(-0.536"

[[4]]
[1] "(-0.138"

[[5]]
[1] "(0.26"

> 
> primerel <- gsub("\\(", "", primerel)
> primerel
[1] "-1.33"  "-0.934" "-0.536" "-0.138" "0.26"  
> 
> primerel <- as.numeric(primerel)
> primerel
[1] -1.330 -0.934 -0.536 -0.138  0.260
> 
0
ответ дан 24.11.2019, 13:08

Ты мог бы использовать функцию sub R для каждого случая. Эта функция remplaza характер из-за одного в выбор. Здесь например мы заменяем все то, что после запятой, для каждого элемента, из-за пустоты в sub(",.*", "", x) например мы даем ему "(2.25, 67]" будешь возвращаться "(2.25" потом чтобы доставать начальную скобку тебя делает его одним substring и применять это к нему ко всему набору данных с одним sapply.

это было бы более или менее так

Сохранять данные в array

cl <- cut(datos, nclass.Sturges(datos))

применяться к каждому элементу array

infs <- sapply(b, function(x) substring(sub(",.*", "", x),2,5))

Конвертировать в числовой

infs <- as.numeric(infs)

Я надеюсь, что он помогает.

0
ответ дан 24.11.2019, 13:08

Это podГ©s делать с регулярными выражениями используя ее funciГіn sub.

intervalos <- cut(datos, nclass.Sturges(datos))
intervalos <- as.character(intervalos)
lim_inf <- as.numeric(sub("\\((.*),.*\\]", "\\1", intervalos))
lim_inf

Из сходной формы podГ©s делать это для верхнего предела реализовывая минимальные изменения в patrГіn ее funciГіn sub.

0
ответ дан 24.11.2019, 13:08