【问题标题】:How can I count the number of times a value occurs in a column of a dataframe?如何计算值在数据框的列中出现的次数?
【发布时间】:2010-07-05 20:30:24
【问题描述】:

是否有一种简单的方法可以识别一个值在数据帧的向量或列中出现的次数?我基本上想要直方图的数值,但我不知道如何访问它。

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

#hist
hist(a)

谢谢。

更新:

根据 Dirk 的建议,我正在使用 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

【问题讨论】:

  • 谢谢大家的建议。我对这个话题的了解还不够,无法理解 table v hist 的微妙之处;并发现 hist 最容易使用,因此将其标记为最佳答案。

标签: r statistics


【解决方案1】:

使用table 函数。

【讨论】:

  • 当你在窃听我对 hist 的建议时(尽管那是 OP 所问的!!),让我提一下 table() 也有一个黑暗的缺点:曾经尝试过您正在制表的对象中有数千个唯一值? ;-) 归根结底,两者都很有价值,但目的不同。就像cut()quantile() 等一样
  • 我对任何返回值数量的方法都很满意,而且似乎我可以控制中断的数量。但是我不明白 hist 的结果:例如hist(a, breaks=3, plot=FALSE)$counts 返回 5 2 0 3
  • @Dirk 我不是在打小报告;在我看来,使用 table 是一个通用的答案,而 hist 是针对唯一值数量很大的情况的优化;确实,当您要计算的数字很少时,与垃圾箱打架一点也不优雅,甚至可能效率低下。
  • @celenius 这就是我喜欢桌子的原因。
  • @celenius: hist() 与许多其他 R 函数一样,具有丰富的功能。如果您说breaks=3,您只会说“给我三个休息时间”。你也可以说breaks=seq(0,5)+0.5 提供0.5,1.5,2.5...,5.5 或许多其他形式。
【解决方案2】:

试试这个:

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 是面向对象的,大多数方法都会返回有意义的结果。使用它们。

【讨论】:

  • 我认为使用 hist 是个坏主意,因为它计算的是 bin 计数,而不是特定的值计数。
  • 感谢 Dirk - 我知道 R 是面向对象的,但我不知道如何弄清楚 plot=FALSE 是我可以传递给 hist 的参数。
【解决方案3】:

如果您想使用hist,您不需要像以前那样指定中断,只需使用seq 函数

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

此外,如果您要查找特定值,也可以使用 which

例如:

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

【讨论】:

    【解决方案4】:

    除了histtable 在Dirk 和mbq 已经指出的许多唯一值的情况下的性能差异之外,我还想提一下功能上的另一个差异。

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

    另一方面,table 只会为您提供现有值的计数。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-08-14
      • 1970-01-01
      • 1970-01-01
      • 2021-02-22
      • 2019-04-24
      • 2015-09-09
      • 1970-01-01
      • 2019-04-19
      相关资源
      最近更新 更多