получить индекс корзины гистограммы в R - PullRequest
2 голосов
/ 13 января 2012

Вот моя проблема:

Как найти индекс корзины с гистограммой, в которую попадает число?

В Matlab решение легко.HISTC выполняет свою работу:

[counts,bin] = histc(data,edges)

"bin" - это то, что я ищу.

Но я работаю в R, и функция hist в R не предлагаетfunctionnality.Я думаю, что мог бы справиться с некоторыми строками кода (используя такие вещи, как min и <), но, поскольку мне нужно сделать это для многих чисел, я хотел бы найти более элегантное решение.

Поскольку я не очень опытен в R, я надеюсь, что может быть хитрое решение, которое поможет решить проблему по-другому.

Ответы [ 2 ]

7 голосов
/ 13 января 2012

Функция hist возвращает точки останова между ячейками, если у вас их еще нет.Затем вы можете использовать функцию findInterval, чтобы определить, в какой интервал / бин попадает каждая из ваших точек:

> tmp <- hist(iris$Petal.Width)
> findInterval(iris$Petal.Width, tmp$breaks)
  [1]  2  2  2  2  2  3  2  2  2  1  2  2  1  1  2  3  3  2  2  2  2  3  2  3  2
 [26]  2  3  2  2  2  2  3  1  2  2  2  2  1  2  2  2  2  2  4  3  2  2  2  2  2
 [51]  7  8  8  7  8  7  9  6  7  7  6  8  6  7  7  7  8  6  8  6 10  7  8  7  7
 [76]  7  7  9  8  6  6  6  7  9  8  9  8  7  7  7  7  7  7  6  7  7  7  7  6  7
[101] 13 10 11 10 12 11  9 10 10 13 11 10 11 11 13 12 10 12 12  8 12 11 11 10 11
[126] 10 10 10 11  9 10 11 12  8  7 12 13 10 10 11 13 12 10 12 13 12 10 11 12 10
> tmp2 <- .Last.value
> cbind( value=iris$Petal.Width, lower=tmp$breaks[tmp2], upper=tmp$breaks[tmp2+1])
       value lower upper
  [1,]   0.2   0.2   0.4
  [2,]   0.2   0.2   0.4
  [3,]   0.2   0.2   0.4
  [4,]   0.2   0.2   0.4
  [5,]   0.2   0.2   0.4
  [6,]   0.4   0.4   0.6
  [7,]   0.3   0.2   0.4
  [8,]   0.2   0.2   0.4
  [9,]   0.2   0.2   0.4
 [10,]   0.1   0.0   0.2
0 голосов
/ 05 декабря 2012

Существует пара пакетов R, которые (повторно) реализуют histc для упрощения переноса кода. Например,

...