数据帧中组的频率图

时间:2016-04-16 10:31:16

标签: r frequency

这是我的一个数据表的摘录:

YR    POPSTAT    Freq
2001       0       34
2002       0       45
2003       0       32
2015       0       16
2001       1        7
2002       1       11
2003       1        8
2014       1        7
2015       1        3

我想绘制所有POPSTAT> 0的每年频率直方图(YR)。这些都不是显而易见的:

for (POPSTAT>0) barplot(table.popstat$Freq)
plot(table.popstat$Freq~table.popstat$YR)

我还需要多年才能在x轴上。任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:1)

如果要按年拆分数据,则需要使用循环或ggplot

require(ggplot2)

ggplot(subset(table.popstat, POPSTAT != 0), aes(x = Freq)) + geom_histogram() + facet_wrap(~YR)

您也可以考虑使用boxplot

ggplot(subset(table.popstat, POPSTAT != 0), aes(x = YR, y = Freq)) + geom_boxplot()

答案 1 :(得分:1)

有两种方法可以做到这一点,但首先您需要获得符合您标准的数据子集(POPSTAT>0)。

在R中获取数据:

plotdata <- dput(plotdata)
structure(list(YR = c(2001L, 2002L, 2003L, 2015L, 2001L, 2002L, 
2003L, 2014L, 2015L), POPSTAT = c(0L, 0L, 0L, 0L, 1L, 1L, 1L, 
1L, 1L), Freq = c(34L, 45L, 32L, 16L, 7L, 11L, 8L, 7L, 3L)), .Names = c("YR", 
"POPSTAT", "Freq"), class = "data.frame", row.names = c(NA, -9L
))

获取子集:

plt_df <- subset(plotdata,POPSTAT>0,select = c(1,3)) #You only want the Year and Freq columns

绘制图表:

基础R

bplot <- barplot(plt_df$Freq, plt_df$YR, ylim = c(0,13),axes=F)
axis(1,at=bplot,labels=plt_df$YR)
axis(2,seq(0,15,3),c(0,3,6,9,12,15))

ggplot package

install.packages('ggplot2')
library(ggplot2)
ggplot(plt_df, aes(x=YR,y=Freq)) + geom_bar(stat='identity')

希望它有所帮助。

答案 2 :(得分:1)

这可以通过两个步骤完成:过滤,绘图和单行:

with(subset(df, POPSTAT > 0), barplot(Freq, names.arg=YR))

如果您更喜欢ggplot2

library(ggplot2)
ggplot(subset(df, POPSTAT > 0)) + aes(x=YR, y=Freq) + geom_bar(stat='identity')

以下是您的dput数据,因此您的示例为reproducible

df <- structure(list(YR = c(2001L, 2002L, 2003L, 2015L, 2001L, 2002L, 
      2003L, 2014L, 2015L), POPSTAT = c(0L, 0L, 0L, 0L, 1L, 1L, 1L, 
      1L, 1L), Freq = c(34L, 45L, 32L, 16L, 7L, 11L, 8L, 7L, 3L)), 
     .Names = c("YR", "POPSTAT", "Freq"),
     class = "data.frame", row.names = c(NA, -9L))