Я хочу, чтобы корзины по 5 мм каждый раз, в сценарии R, который анализирует различные нормальные распределения - PullRequest
0 голосов
/ 19 марта 2020

Сразу же, я новичок ie в R и, возможно, я неправильно понимаю концепцию того, что мой код делает против того, что я хочу, чтобы он делал. Вот код, который я написал до сих пор.

his <- hist(x, breaks=seq(floor(min(x)) , ceiling(max(x)) + ifelse(ceiling(max(x)) %% 5 != 0, 5, 0), 5)
Here is some sample data:
Autonr                      X
1                           -12
2                            -6
3                           -17
4                             8
5                           -11
6                           -10   
7                            10
8                           -22

Я не могу загрузить одну из работавших гистограмм, но она должна отображать ячейки 5, независимо от их размера. распространение данных. Поэтому количество ячеек должно быть гибким.

Идея кода выше состоит в том, чтобы убедиться, что внешние диапазоны моих данных всегда попадают в аккуратно определенные 5-миллиметровые ячейки. Может быть, я потерял контроль. но я не могу понять, почему это не всегда работает. В некоторых случаях это так, но с другими наборами данных это не так.

Я получаю: некоторые 'x' не учитываются; возможно, 'перерывы' не охватывают диапазон 'х'.

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

Ответы [ 2 ]

1 голос
/ 19 марта 2020

Вместо того, чтобы передавать вектор разрывов, вы можете указать одно значение, в этом случае вычисление того, сколько бинов требуется, учитывая диапазон данных и ширину привязки 5.

# Generate uniformly distributed dummy data between 0 and 53
set.seed(5)
x <- runif(1000, 0, 53)

# Plot histogram with binwidths of 5.
hist(x, breaks = ceiling(diff(range(x)) / 5 ))

enter image description here

0 голосов
/ 21 марта 2020

Для полноты картины, вот еще один подход, который использует breaks_width() из пакета scales. scales является частью ggplot2 экосферы Хэдли Уикхема.

# create sample data
set.seed(5)
x <- runif(1000, 17, 53)

# plot histogram
hist(x, breaks = scales::breaks_width(5)(range(x)))

enter image description here

Пояснение

scales::breaks_width(5) создает функцию который затем вызывается с вектором минимальных и максимальных значений x, возвращаемым range(x). Итак,

scales::breaks_width(5)(range(x))

возвращает вектор разрывов с необходимым размером ячейки 5:

[1] 15 20 25 30 35 40 45 50 55

Приятно, что у нас есть полный контроль над бункера. Например, мы можем запросить странные вещи, такие как размер ячейки 3, который смещен на 2:

scales::breaks_width(3, 2)(range(x))
 [1] 17 20 23 26 29 32 35 38 41 44 47 50 53 56
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...