R通过分类或因子列获得频率分布

R get frequency distribution by a categorical or factor column

我有如下数据。如果我想找到频率分布,那么我可以使用下面的 hist 命令并使用 histz$breakshistz$counts 查找落在每个范围内的观测值的数量。

我想按 a 列中的值获取 b 列的分布。我的 a 列将有 6 个不同的值。

我的预期输出是一个数据框

我的数据

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

可以用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 参数控制精度。