R通过分类或因子列获得频率分布
R get frequency distribution by a categorical or factor column
我有如下数据。如果我想找到频率分布,那么我可以使用下面的 hist 命令并使用 histz$breaks
和 histz$counts
查找落在每个范围内的观测值的数量。
我想按 a 列中的值获取 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
可以用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
参数控制精度。
我有如下数据。如果我想找到频率分布,那么我可以使用下面的 hist 命令并使用 histz$breaks
和 histz$counts
查找落在每个范围内的观测值的数量。
我想按 a 列中的值获取 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
可以用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
参数控制精度。