2010-07-05 133 views
5

是否有一种简单的方法来确定数值在矢量或数据帧列中的次数?我基本上想要直方图的数值,但我不知道如何访问它。如何计算数据帧的列中出现值的次数?

# sample vector 
a <- c(1,2,1,1,1,3,1,2,3,3) 

#hist 
hist(a) 

谢谢。

UPDATE:

在我使用HIST德克的建议。当我知道我的所有值都是整数时,是否有比指定范围为1.9,2.9等更好的方法?

hist(a, breaks=c(1,1.9,2.9,3.9,4.9,5.9,6.9,7.9,8.9,9.9), plot=FALSE)$counts 
+0

谢谢大家的建议。我不太了解这个话题来理解表v hist的微妙之处;并发现hist最容易使用,因此将其标记为最佳答案。 – djq 2010-07-07 15:54:26

回答

8

试试这个:

R> a <- c(1,2,1,1,1,3,1,2,3,3) 
R> b <- hist(a, plot=FALSE) 
R> str(b) 
List of 7 
$ breaks  : num [1:5] 1 1.5 2 2.5 3 
$ counts  : int [1:4] 5 2 0 3 
$ intensities: num [1:4] 1 0.4 0 0.6 
$ density : num [1:4] 1 0.4 0 0.6 
$ mids  : num [1:4] 1.25 1.75 2.25 2.75 
$ xname  : chr "a" 
$ equidist : logi TRUE 
- attr(*, "class")= chr "histogram" 
R> 

R是和大多数方法产生有意义的结果返回面向对象的。使用它们。

+0

我认为使用hist是一个坏主意,因为它计算垃圾箱数量,而不是特定的数值。 – mbq 2010-07-05 20:35:13

+0

谢谢德克 - 我明白R是面向对象的,但我不知道如何确定plot = FALSE是我可以传递给hist的参数。 – djq 2010-07-05 20:36:28

+3

尝试'help(hist)'。 – 2010-07-05 20:40:14

20

使用table函数。

+0

正如你在谈论关于'hist'的建议(尽管这是OP询问的内容!!),让我提及'table()'也有一个黑暗的缺点:曾经尝试过使用数千个独特的值你正在列表的对象? ;-)在一天结束时,两者都是有价值的,但为了不同的目的。正如'cut()','quantile()'etc pp – 2010-07-05 20:42:10

+0

我很满意任何返回值数量的方法,而且我似乎可以控制中断的数量。但是我不明白hist的结果:例如 hist(a,breaks = 3,plot = FALSE)$ counts returns 5 2 0 3 – djq 2010-07-05 20:47:28

+0

@Dirk我不是在sn;;在我看来,使用表格是一个通用答案,hist是针对特定值数量较大的情况的优化;当你只有很少的数字可以计算时,确实与箱子打架并不是很优雅,甚至可能效率低下。 – mbq 2010-07-05 21:00:06

5

如果你想使用hist你不需要像你一样指定符,只需使用seq功能

br <- seq(0.9, 9.9, 1) 
num <- hist(a, br, plot=F)$counts 

另外,如果你正在寻找你也可以使用一个特定的值which

例如:

num <- length(which(a == 1)) 
2

除了许多独特价值的情况下histtable之间的性能差异是德克和MBQ已经指出的那样,我也想提一提的功能的其他差异。

hist$counts对于没有任何情况的箱子也会给你零计数。如果你想对后面的图中最后会显示的箱子数量(比如barplot上的酒吧)有信心,这可能非常有价值。

table另一方面只会给你现有的价值计数。

您可能还想检查right选项hist,该选项控制您的休息(休息时间)是否会正确关闭。