R получить распределение частоты по категориальному или факторному столбцу
У меня есть данные, как показано ниже. Если я хочу найти распределение частоты, то я могу использовать команду Hist, как показано ниже, и используя histz$breaks
а также histz$counts
найти количество наблюдений, которые попадают в каждый диапазон.
Я хотел бы получить распределение столбца b по значению в столбце a. Мой столбец А будет иметь 6 различных значений.
Мой ожидаемый вывод - это фрейм данных, который будет иметь
- 1-й столбец - значение разрыва
- 2-й столбец - когда первый столбец испытания имеет значение a, то подсчитываются значения, попадающие в диапазоны, определяемые значениями разрыва
- 3-й столбец - если в первом столбце пробного использования задано значение b, то подсчитываются значения, попадающие в диапазоны, определяемые значениями разрыва
- 4-7 столбец - логика, аналогичная предыдущим 2 столбцам
Мои данные
a=c("a","a","b","a","b","b","c","a")
b=c(1,3,4,3,5,7,8,9)
trial=data.frame(a,b)
histz=hist(trial$b, breaks=c(0,4,6,100),plot=FALSE)
histz
1 ответ
Ты можешь использовать cut()
классифицировать b
, затем table()
получить распределение в каждом диапазоне. В вашем примере
tab = table(cut(trial$b,breaks=c(0,4,6,100)),trial$a)
Производит
a b c
(0,4] 3 1 0
(4,6] 0 1 0
(6,100] 1 1 1
Если вы хотите пропорции, вы можете использовать
ptab = prop.table(tab,margin=2)
и для форматирования 2 цифры
rtab = round(ptab,2)
в результате чего
a b c
(0,4] 0.75 0.33 0.00
(4,6] 0.00 0.33 0.00
(6,100] 0.25 0.33 1.00
Наконец, если вы хотите конвертировать проценты, используйте formattable
библиотека
library(formattable)
prtab = apply(rtab,1:2,percent,digits=0)
a b c
(0,4] "75%" "33%" "0%"
(4,6] "0%" "33%" "0%"
(6,100] "25%" "33%" "100%"
Вы можете контролировать точность с digits
аргумент.