R 如何计算值在数据帧的列中出现的次数?

R 如何计算值在数据帧的列中出现的次数?,r,statistics,R,Statistics,有没有一种简单的方法来确定一个值在数据帧的向量或列中的次数?我基本上想要直方图的数值,但我不知道如何访问它 # sample vector a <- c(1,2,1,1,1,3,1,2,3,3) #hist hist(a) 使用表功能。尝试以下操作: 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]

有没有一种简单的方法来确定一个值在数据帧的向量或列中的次数?我基本上想要直方图的数值,但我不知道如何访问它

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

#hist
hist(a)

使用
功能。

尝试以下操作:

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>abstr(b)
7人名单
$breaks:num[1:5]11.52.53
$counts:int[1:4]5203
$intensity:num[1:4]10.40.6
$density:num[1:4]10.40.6
$mids:num[1:4]1.251.752.252.75
$xname:chr“a”
$equidist:logi TRUE
-属性(*,“类”)=chr“直方图”
R>

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

如果要使用
hist
您不需要像以前那样指定中断,只需使用
seq
功能即可

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

除了在Dirk和mbq已经指出的许多独特值的情况下,
hist
table
之间的性能差异之外,我还想提及功能上的其他差异

hist$counts
还将为没有任何箱子的箱子提供零计数。如果您希望确定最终将出现在下一个图中的存储箱数量(例如条形图上的条形图),这可能非常有用

另一方面,
将只提供现有值的计数


您可能还需要检查
hist
right
选项,该选项控制您的中断(间隔)是否正确关闭

我认为使用hist是个坏主意,因为它计算的是仓位计数,而不是特定的值计数。谢谢Dirk-我知道R是面向对象的,但我不知道如何确定plot=FALSE是一个我可以传递给hist的参数。例如,当你抱怨我关于
hist
(尽管这是OP询问的问题!!),让我提一下
table()
也有一个黑暗的缺点:有没有在制表的对象中尝试过数千个唯一的值?;-)在一天结束时,这两个值都很有价值,但用途不同。正如
cut()
quantile()
等一样,我对任何返回数值计数的方法都很满意,而且似乎我可以控制中断的数量。但是我不理解hist的结果:例如hist(a,breaks=3,plot=FALSE)$counts返回5 2 03@Dirk我没有告密;在我看来,使用table是一个通用的答案,而hist是针对唯一值数量较大的情况的优化;事实上,当你要数的数字不多时,与垃圾桶搏斗一点也不优雅,甚至可能效率低下。@celenius这就是我喜欢table的原因。@celenius:
hist()
,与许多其他R函数一样,功能丰富。如果你说“休息3次”,你只会说“给我三次休息”。您也可以说
breaks=seq(0,5)+0.5
,以提供0.5,1.5,2.5…、5.5或许多其他形式。谢谢大家的建议。我对这个主题了解不够,无法理解表v hist的微妙之处;并发现hist最容易使用,因此将其标记为最佳答案。
br <- seq(0.9, 9.9, 1)
num <- hist(a, br, plot=F)$counts
num <- length(which(a == 1))