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

wds*_*wds 17 plot r histogram frequency-distribution

我有一个有很多不同价值观的因素.如果执行summary(factor)输出,则列出不同的值及其频率.像这样:

A B C D
3 3 1 5
Run Code Online (Sandbox Code Playgroud)

我想制作频率值的直方图,即X轴包含发生的不同频率,Y轴包含具有此特定频率的因子数.完成这样的事情的最佳方法是什么?

编辑:感谢下面的答案,我发现我能做的就是从表中得到频率因子,然后在表格中得到它,然后绘制图形,这看起来像(如果f是因素):

plot(factor(table(f)))
Run Code Online (Sandbox Code Playgroud)

Rei*_*son 27

根据澄清的Q更新

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

得到:

因子中出现频率的直方图

这里我们hist()直接应用于结果table(dat).table(dat)提供每个级别因子的频率并hist()产生这些数据的直方图.


原版的

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

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

这里有三个,从第一列,从上到下:

  • 类的默认绘图方法"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)
Run Code Online (Sandbox Code Playgroud)

这会产生:

一维情节

如果你只是有你的数据变量factor(恶名选择的方式),那么table(factor)可以使用,而不是table(dat)或者table(dat$fac)在我的代码示例.

为了完整性,lattice在生成点图时,包更加灵活,因为我们可以获得您想要的方向:

require(lattice)
with(dat, dotplot(fac, horizontal = FALSE))
Run Code Online (Sandbox Code Playgroud)

赠送:

格子dotplot版本

还有一个ggplot2版本:

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

赠送:

ggplot2版本

  • 对于奖励积分,您可以将因子水平从最小到最大重新排序.`fac_levels < - levels(dat $ fac); o < - order(table(dat $ fac)); dat $ fac < - with(dat,factor(fac,levels = fac_levels [o]))`. (3认同)