Функция Cut в R не создает желаемое количество интервалов

Мой диапазон значений довольно узок, но я хочу, чтобы функция обрезки заставляла интервалы увеличиваться, даже если это означает, что диапазон интервалов будет довольно узким. Но оно этого не делает.

temp <- c(8.32, 8.43, 8.41, 7.86, 7.98, 7.86, 8.07, 8.51, 7.92, 7.94, 8.36)
bins = 3
labels = c("Low","Medium","High")

categories <- cut(temp, breaks=bins, labels=labels)

> categories
 [1] High High High Low  Low  Low  Low  High Low  Low  High
Levels: Low Medium High

Но если я попрошу его разрезать на 4 интервала, я получу больший диапазон:

bins = 4
labels = c("Low","Medium","High", "Very High")

categories <- cut(temp, breaks=bins, labels=labels)

> categories
 [1] High      Very High Very High Low       Low       Low       Medium    Very High Low       Low       Very High
Levels: Low Medium High Very High

Как я могу заставить свой 3-интервальный диапазон включать некоторые значения как «средние»?

Вы должны предоставить желаемые точки останова вместо того, чтобы «вырезать» их вычислять. Вы читали «Помощь («вырезать»)»?

Roland 11.07.2024 20:10

Если вы хотите автоматизировать это и не указывать точки останова, ggplot2 имеет для этого хорошие функции: cut_interval() создает n группы с одинаковым диапазоном, cut_number() создает n группы с (приблизительно) равным количеством наблюдений; cut_width() делает группы шириной width. См. документацию .

SamR 11.07.2024 20:13

В интервале 8.076667 8.293333 нет элементов temp. Вот почему нет «Средних значений».

Rui Barradas 11.07.2024 20:50
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
3
66
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

1) квантиль. Попробуйте сократить на квантили.

bins <- length(labels)
cut(temp, breaks = quantile(temp, 0:bins / bins), labels = labels,
  include.lowest = TRUE)


##  [1] Medium High   High   Low    Medium Low    Medium High   Low    Low   
## [11] High  
## Levels: Low Medium High

2) quantcut или попробуйте quantcut из gtools

library(gtools)
quantcut(temp, q = length(labels), labels = labels)

##  [1] Medium High   High   Low    Medium Low    Medium High   Low    Low   
## [11] High  
## Levels: Low Medium High

Это сработало отлично. Спасибо!

Katherine Chau 11.07.2024 21:01

Есть ли способ увидеть, как Quantcut разделяет данные по количеству ячеек, которые мне нужны? Просто чтобы я мог видеть диапазон для каждого интервала?

Katherine Chau 12.07.2024 17:30

Прежде чем бежать quantcut беги trace(quantcut, exit = quote(print(quant)))

G. Grothendieck 12.07.2024 17:36

или беги quantcut(temp, q = 3)

G. Grothendieck 12.07.2024 17:38

Другие вопросы по теме