2016-04-13 60 views
1

我正在寻找有关从我的数据框中为列中的范围表示频率计数的最佳方法的建议。关于绘制频率数据的最佳方法的建议

实施例:

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(),块大小设定为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的类别,可能仍然使用“剪切”功能,然后使用“barplot”而不是“plot”。

我想知道是否有任何这种方法的缺点,或者什么是更正确的方式来显示我想要的。如果我的目的不明确,请告诉我,或者我需要添加更多详细信息。

回答

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大小。在你的情况下,符合要求是完美的,因为你要求的仓大小为1. cut允许指定仓位边界,甚至可以让你选择是左边界还是右边界是接近(或打开)。我的偏好是左闭合,这不是默认的。

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

我更喜欢使用这样的:

plot(density(my_table$xcat)) 

enter image description here

这也可以轻松覆盖其他频率,例如:

my_table$xcatNew <- c(1,1,1,1,1,1,1,1,1,1,11,12,14,14,14,14, 
         15,15,15, 17,17,17, 18,18,18,18,20,20) 

plot(density(my_table$xcat)) 
lines(density(my_table$xcatNew), col = "red") 

enter image description here

相关问题