我正在寻找有关表示数据框中列范围的频率计数的最佳方法的建议。
示例:
my_table<- data.frame('xcat' = c(1,1,1,2,2,2,5,10,10,10,11,11,11,14,14,14,
15,15,15, 17,17,17, 18,18,18,20,20,20))
在上面的数据框中,我想绘制从1到20的频率。 一种方法是使用hist(),将bin大小设置为1,即:
my_hist<- hist(my_table$xcat,
breaks=seq(from = 0.5, to= (max(my_table$xcat)+0.5),
by =1))
如您所见,我添加了0.5的偏移量,因此每个bin将显示在对应的整数上。 另一种方法是创建一个包含计数的表,然后生成间隔:
my_tablecut = cut(my_table$xcat, breaks= seq(from =0.5, to =20.5,
by = 1), right=FALSE)
my_tablefreq = as.data.frame(table(my_tablecut))
my_tablefreq$pos<- 1:nrow(my_tablefreq)
plot(my_tablefreq$pos, my_tablefreq$Freq, type = 'l')
在我写作时,我意识到使用条形图而不是直方图可能更为正确;在这种情况下,我仍然需要生成频率为0的类别,可能仍然使用&#39; cut&#39;功能,然后去&#39; barplot&#39;而不是&#39; plot&#39;。
我想知道这些方法是否有任何缺点,或者什么是更合适的方式来展示我想要的东西。如果我的目的不明确,请告诉我,或者我需要添加更多细节。
答案 0 :(得分:2)
> table(my_table)
my_table
1 2 5 10 11 14 15 17 18 20
3 3 1 3 3 3 3 3 3 3
缺点是table
不允许对bin大小进行任何调整。在您的情况下,符合要求的拟合是完美的,因为您要求的bin大小为1. cut
允许bin-boundary的指定,甚至允许您选择是否是接近的左边界或右边界(或打开)。我的偏好是左边关闭,这不是默认值。
hist
会在barplot
只是绘图的情况下返回休息时间和休息时间中的计数(甚至更多):
> my_hist
$breaks
[1] 0.5 1.5 2.5 3.5 4.5 5.5 6.5 7.5 8.5 9.5 10.5 11.5 12.5 13.5 14.5 15.5 16.5
[18] 17.5 18.5 19.5 20.5
$counts
[1] 3 3 0 0 1 0 0 0 0 3 3 0 0 3 3 0 3 3 0 3
$density
[1] 0.10714286 0.10714286 0.00000000 0.00000000 0.03571429 0.00000000 0.00000000 0.00000000
[9] 0.00000000 0.10714286 0.10714286 0.00000000 0.00000000 0.10714286 0.10714286 0.00000000
[17] 0.10714286 0.10714286 0.00000000 0.10714286
$mids
[1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
$xname
[1] "my_table$xcat"
$equidist
[1] TRUE
attr(,"class")
[1] "histogram"
答案 1 :(得分:1)