获取因子频率的直方图(摘要)

20

我有一个具有许多不同值的因子。如果执行summary(factor),输出将是不同值及其频率的列表。如下所示:

A B C D
3 3 1 5

我想制作一个频率值的直方图,即X轴包含不同发生的频率,Y轴是具有该特定频率的因子数。如何最好地实现这样的事情?

编辑:感谢下面的答案,我想到了可以从表格中获取频率因子的方法,将其放在一个表格中,然后也可以将其作为图形进行绘制,例如(如果f是因子):

plot(factor(table(f)))
1个回答

27

在澄清问题后更新

set.seed(1)
dat2 <- data.frame(fac = factor(sample(LETTERS, 100, replace = TRUE)))
hist(table(dat2), xlab = "Frequency of Level Occurrence", main = "")

给出:

histogram of frequency of occurrence in factor

在这里,我们直接将hist()应用于table(dat)的结果。 table(dat)提供了因子每个水平的频率,hist()生成这些数据的直方图。

原文

有几种可能性。你的数据:

dat <- data.frame(fac = rep(LETTERS[1:4], times = c(3,3,1,5)))

以下是从第一列自上而下的三个:

  • "table"的默认绘图方法,绘制数据和直方图状条形图
  • 条形图 - 这可能是你所说的直方图。请注意这里的低墨水信息比率。
  • 点图或点图表;显示与其他图相同的信息,但每单位信息使用的墨水要少得多。首选。

生成它们的代码:

layout(matrix(1:4, ncol = 2))
plot(table(dat), main = "plot method for class \"table\"")
barplot(table(dat), main = "barplot")
tab <- as.numeric(table(dat))
names(tab) <- names(table(dat))
dotchart(tab, main = "dotchart or dotplot")
## or just this
## dotchart(table(dat))
## and ignore the warning
layout(1)

这将产生:

one dimensional plots

如果你只是将数据存储在变量 factor 中(顺便说一下,这个命名不好),那么可以使用table(factor)而不是我的代码示例中的table(dat)table(dat$fac)
为了完整起见,包lattice在生成点图时更加灵活,因为我们可以得到所需的方向:
require(lattice)
with(dat, dotplot(fac, horizontal = FALSE))

提供:

Lattice dotplot version

还有一个ggplot2版本:

require(ggplot2)
p <- ggplot(data.frame(Freq = tab, fac = names(tab)), aes(fac, Freq)) + 
    geom_point()
p

提供:

ggplot2 version


3
为了获得额外的分数,您可以将因子水平从小到大重新排序。fac_levels <- levels(dat$fac); o <- order(table(dat$fac)); dat$fac <- with(dat, factor(fac, levels = fac_levels[o])) - Richie Cotton
我在我的问题中可能没有表达清楚。我知道如何做到这一点。我想要做的是计算有多少个因子的频率为1,有多少个因子的频率为2、3等等,然后将其绘制在条形图上(基本上,如果你将其分组,这就是一个直方图)。也许它是一个因子并不理想,但这是从read.csv中得出的。所以我想要的是一个显示频率的频率的图表。 - wds
@wds 这更符合你的要求吗? - Gavin Simpson
太棒了,谢谢。我想把它转换成条形图,也许使用对数y轴来突出离群值,但我想这是完全不同的问题。 - wds
原始答案在进一步分析中确实非常有帮助,再次感谢。 - wds

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接