具有多个因子分组的条形图和这些因子的变量均值

时间:2017-10-08 00:16:32

标签: r plot bar-chart factors tapply

我正在尝试创建一个条形图,显示工会和非工会工人的平均小时工资,按照大学毕业或不是大学毕业分组的单身或结婚分组。虽然我设法构建了一个具有两个因子分组的可通过的条形图,但我无法弄清楚如何使用三个因子分组来实现这一点。我看到的例子中有三个因素只关注频率计数,因此我不确定如何将所有因子中另一个变量的均值纳入图中。我想要创建的东西看起来像这样(在Stata中创建): Average Hourly Wage by Union Status, Marital Status, and College Graduation 我的代码如下所示:

levelbar = tapply(wage, list(as.factor(union), as.factor(married), 
as.factor(collgrad)), mean)
par(mfrow = c(1, 2))
barplot(levelbar, beside = TRUE)
barplot(t(levelbar), beside = TRUE)

然而,当我运行它时,我收到错误:

Error in barplot.default(levelbar, beside = TRUE) : 
'height' must be a vector or a matrix

对此有任何帮助将不胜感激。我确定ggplot在这里可能有用,但我没有很多使用该软件包的经验。

1 个答案:

答案 0 :(得分:0)

以下是使用ggplot和内置数据集泰坦尼克号的可重现示例。

请注意,我们先计算均值,然后使用stat = identity确保我们将其纳入图中。

# Format the Titanic dataframe
Titanic_df <- Titanic %>% as_tibble()

# Make Class, Sex, Age, and Survived factors
for (col in c("Class", "Sex", "Age", "Survived")) {
  Titanic_df[[col]] <- factor(Titanic_df[[col]])
}

# Get by group means
means <- Titanic_df %>% 
  group_by(Class, Sex, Survived) %>% 
  summarise(
    mean_n = mean(n)
  )

# Plot: facets are the Classes, bar colors are the two Sexes, and the groupings in each facet are Survived vs. Not Survived
ggplot(data = means) +
  geom_bar(aes(x = Survived, y = mean_n, fill = Sex), stat = "identity", position = "dodge") +
  facet_wrap(~ Class)

enter image description here