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 аргумент.

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