Создайте гистограмму для взвешенных значений

Если у меня есть вектор (например, v<-runif(1000)), я могу построить его гистограмму (которая будет выглядеть более или менее как горизонтальная линия, потому что v является образцом из равномерного распределения).

Однако предположим, что у меня есть вектор и связанные с ним веса (например, w<-seq(1,1000) в дополнение к v<-sort(runif(1000))). Например, это результат table() в гораздо большем наборе данных.

Как построить новую гистограмму? (в этом примере он должен выглядеть не так, как строка y=x).

Я думаю, что я мог бы изменить эффекты table, используя rep (hist(rep(v,w))), но это "решение" кажется уродливым и ресурсоемким (создает промежуточный вектор размера sum(w)), и это только поддерживает целые веса.

Ответы

Ответ 1

Пакет plotrix имеет функцию weighted.hist, которая делает то, что вы хотите:

w<-seq(1,1000)
v<-sort(runif(1000))
weighted.hist(v, w)

Example of <code>weighted.hist</code>

Ответ 2

library(ggplot2)
w <- seq(1,1000)
v <- sort(runif(1000))

foo <- data.frame(v, w)

ggplot(foo, aes(v, weight = w)) + geom_histogram()

enter image description here

Ответ 3

Альтернативой из пакета weights является wtd.hist()

w<-seq(1,1000) v<-sort(runif(1000)) wtd.hist(x=v,weight=w) enter image description here